[原创]libsgmain分析记录-反调试
大家在互相说着保重身体。
突然觉得技术笔记留着没啥用了,身体健康才是最重要的。
。
。
。
。
。
。
很久以前的分析的记录
1. 编译Android源码,去掉反调试标记
参考https://bbs.pediy.com/thread-219233.htm
2. 找到doCommandNative函数地址
编译Android源码,修改libart,打印动态注册doCommandNative时的地址
修改如下
static jint RegisterNativeMethods(JNIEnv* env, jclass java_class, const JNINativeMethod* methods,
jint method_count, bool return_errors) {
@@ -2097,6 +2097,7 @@ class JNI {
const char* name = methods[i].name;
const char* sig = methods[i].signature;
const void* fnPtr = methods[i].fnPtr;
+ LOG(WARNING) << "JNI RegisterNativeMethods name:" << name << " sig:" << sig << " fnPtr:" << fnPtr;
if (UNLIKELY(name == nullptr)) {
ReportInvalidJNINativeMethod(soa, c, "method name", i, return_errors);
return JNI_ERR;
3. adb shell中运行ida的 android_server, 自定义端口, 端口随便你自己定义
adb push android_server /data/local/tmp/as adb shell /data/local/tmp/as -p11678
4. adb转发11678
adb forward tcp:11678 tcp:11678
5. ida附加com.MobileTicket
com.MobileTicket有三个进程,只需要附加"com.MobileTicket",主程序就是com.MobileTicket, 其他两个进程都有后缀,很容易辨认。
6. doCommandNative下断点
adb logcat -s "art" | grep "doCommandNative",可以查看到doCommandNative的地址 多次调试发现,com.MobileTicket v3.0.1版的, libsgmainso-5.4.2008.so!0xbcfd就是doCommandNative 因此,附加后,查看libsgmain的基址 /data/data/com.MobileTicket/app_SGLib/app_1520836802/libsgmainso-5.4.2008.so 9FA48000 000B4000 计算得到hex(0x9FA48000+0xbcfd) = 0x9fa53cfd
由于doCommandNative是thumb的函数,所以在0x9fa53cfc, 按alt+g,改为1

按 c, 把数据转为代码

在 0x9fa53cfc 下断点
7. 挂起其他线程
手机上执行操作,触发doCommandNative,
在Threads list中可以看到,停在当前线程上,也可以用get_current_thread()查看当前的线程

挂起其他所有线程

注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
