欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]libsgmain分析记录-反调试

[原创]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。

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

0 0 0 举报
复制成功