Android逆向 ida动态调试问题

Android逆向 ida动态调试问题,第1张

先输入”adb shell”,然后输入”su root”获取root权限。

接着输入” chmod 777 /data/local/tmp/android_server” 给android_server加上相应的权限。

接着输入” /data/local/tmp/android_server”启动android_server。

如下图所示:

输入”adb forward tcp:23946 tcp:23946”进行tcp端口转发

命令,启动所要调试的Activity。

app会d出”Waitting for debugger”对话框,如下图所示:

点击”Debug options”按钮,在”Suspend on process entry point”, ”Suspend on thread start/exit”, ”Suspend on library load/unload” 等选项的前面打上勾,如下图所示:

点击”ok”后会在以下对话框的hostname中填上”localhost”

在d出的”Choose process to attach to”窗口中找到”com.example.testjniso”进程,选中该进程,然后点击”ok”按钮。

其中可以看到com.example.testjniso进程的端口为8700。

如下图所示:

在idad出的”Add map”窗口中,一律点击”Cancle”按钮。

点击ida中的暂停调试按钮,暂停当前的调试,如下图所示:

右击libTestJniSo.so文件,在d出的框中点击”Jump to module base”,跳转到libTestJniSo.so文件的起始地址。

按下Alt+T,d出查找对话框中输入” Java_com_example_testjniso_MainActivity_helloFromJni” 如下图所示:

点击”ok”按钮后,即可跳转到 Java_com_example_testjniso_MainActivity_helloFromJni 函数所在的起始地址。

然后在地址处下断点:

再按F9重新开始调试,点击app中的”点击加载so文件”按钮重新加载libTestJniSo.so,即可看到程序成功地停在了断点处:

到此处就可以正常地调试so文件了。

Linker是什么?

Linker就是/system/lib/linker,它是进程启动时第一个加载的模块,它负责管理elf可执行文件以及各个so文件的加载执行,还参与了调试的一些东西。通俗地说,它是一个elf文件的解释器。它可以加载elf可执行文件及so动态库。

在android 5.0下,不能执行android_server是因为android5.0自带的linker不支持加载非pie的elf文件,但如果自己实现一个可以加载pie的linker,不就可以解决这个问题了吗?对的,就是酱紫,补上自己的自定义linker在附件.

https://bbs.pediy.com/thread-206084.htm

主要通过以下几个步骤: 1、手机通过数据线连接在电脑上 2、设置android手机为USB调试模式。步骤: menu- 设置 - 应用程序 - 开发 , 选择【USB调试】 3、如果是window系统,系统会提示安装驱动: 选择正确的android sdk安装目录,然后点击下一步,系统就开始安装驱动了 4、驱动安装完成之后,重启电脑(通常系统会有“安装新驱动,重启才能生效”的提示),这但应该明白吧 5、重复第1步和第2步,打开命令窗口,检测手机设备是否已经被识别,如下所示: “HT99YLG11834 device”就是检测到得手机设备 6、接下来就开始在eclipse上调试android程序了, 右击android工程-Run as-Android Application ,d出如下窗口:(重新启动系统之后才有这样的效果) 7、选中手机设备,点击OK之后,程序就开始在真机上安装了,控制台输出如下信息: 8. 设置应用程序为调试模式。 *** 作: 编辑AndroidManifest.xml 增加调试参数android:debuggable=true, 如下: <application android:icon=@drawable/icon android:label=@string/app_name android:debuggable=true 9. 执行真机调试 *** 作:ECLIPSE调试对话框中,Target窗口中选择Manual,点击【debug】按钮,选择真机设备,开始调试。 注:不管是否启用ECLIPSE环境,任何Android软件只要在真机上运行发生异常,都可以在命令行窗口下查看具体异常信息: 执行:./adb logcat 可以查看到更多的系统异常消息。在这些消息中要注意查看Caused by:打 头的行,这些行指明了在哪行代码出的错误10、运行这个应用程序,这样就可以使用手机来测试了

 安卓手机用ida在apk执行前动态调试其so中的函数 方法1 1、解包对方APK,插入一个:对应SMALI:android.os.SystemClock.sleep(20000)const-wide/16 v0, 0x2710 #20秒invoke-static {v0, v(X-1)}, Landroid/os/SystemClock->sleep(J)V这里(X-1)对应.local X。 2 另外,有的包在你要调试的那个SO里面有签名保护,反正你重新打了包之后会导致程序运行崩溃,这个相比JAVA修改困难些,建议你用那个签名漏洞来打包。事实上我调试那个SO也遇到过这样,然后打了个签名漏洞的包嵌入的延时函数就可以了。 方法2 1) am start -D -n 包名/类名; 2) IDA pro attach 进程, 设置新线程,加载so时断点,continue; 3) 打开ddms, 查看调试端口, jdb attach port; 4) 这个时候应该已经断在新线程,或者加载so处了,在你感兴趣的so处停下来; 5) 另外用ida 打开so,查看你感兴趣的函数偏移, 加上你感兴趣的so的基地址,打上断点,continue, 就大功告成了。 注意事项 windows下ida6.1不行,linux ida 6.4可以,不知是ida的问题还是windows的问题,你可以在linux下用wine测一下。 经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12113390.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存