JDB调试Android程序(通过JDB进行代码注入)

2023-05-16

前言

最近在做一些安卓安全相关的事情,就看到了一个通过动态调试进行代码注入的一个概念,收益匪浅,原来好多东西还能这么玩的。闲言少絮,开始正式行动。

漏洞检查

由于我这边是做的关于安卓安全相关的事情,主要是想知道哪些问题可以被攻击到,因此我这边需要知道那些app可以被debug。所以我的第一步是用apktool对apk进行反编译,查看反编译出的文件夹下的AndroidManifest.xml,假如发现里边有android:debuggable=”true”,就意味着这个apk可以被反编译。(当然,此处加入你是调试自己写的apk的话,也就不用有这一步了,不过自己的apk为什么用JDB调试这个有待考虑。)这里我用自己写的一个apk进行操作。代码很简单,只有一个按钮和一个文本信息,点击按钮将文本信息替换。我可以附上链接,不过好像最近下载没有免费的,建议这个可以自己写一下,实在懒得下的,又是有积分任性的可以在这里直接下载。
对于用apk反编译的过程,不在赘述,直接附图,实在不知可以百度。
apktool反编译

准备开始

  1. 先安装应用,命令:adb install [apkname].apk
    install app
  2. 再用debug模式启动应用,命令adb shell am start –D –n 包名/类名(包名和类名可以在反编译出的AndroidManifest.xml中找到,不详细介绍)上图
    debug模式启动
    这个时候假如你开启了DDMS,不出意外的话,你应该能看见有一个红虫子,如图:
    DDMS中的debug显示
  3. 接下来就是使用adb来转发端口,命令:adb forward tcp:port jdwp:pid;其中port是自己随便定义,pid则是在上图中的8614,因此在这里我们可以是adb forward tcp:54321 jdwp:pid。由于没什么输出就不上图了。另外,假如没有事先打开DDMS的,可以在启动前后分别运行adb jdwp命令,比较两次输出的差距来获取pid,一般就是最后的那个。
  4. 最后就是adb连接安卓应用了。命令:jdb –connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
    attachapk
    出现如图就是连接成功了,接下来就是jdb的事情了。网上好多的博客或者资料里边都是采用linux作为运行环境,这个应为自己没有看仔细着实卡了好一顿时间。这里也附上Linux的命令(未亲测):jdb -attach localhost:port
  5. 终于开始稍微精彩刺激的了。就是本来修改我们显示文本本来要呈现的内容。先通过classes命令查看加载好的类,然后可以查看MainActivity中的方法,命令methods com.jdb.test.jdbtest.MainActivity 1( 1可以用class com.jdb.test.jdbtest.MainActivity查出)
    addstop
    接下来就是在app中手动输入文字后点击按钮,运行到断点处。
    clickpage
    触发断点
    然后可以用next和locals配合使用。为了更好得说明,我们这里能够就根据代码来看。
    code
    再两次next了以后locals看到本地变量中有一个变量txt=”nihao”这就是我们输入的内容也就是我们即将要展示的内容啊,如图。
    locals
    那我们很简单的想法就是用set把这个变量给修改了
    hacking
    接下来可以直接run,在应用上看结果
    result
    显然跟我们预期的一样,这样就完成了通过调试实现了代码的注入。

总结过程

其实总的来说这个还是一个听简单的事情,但是一方面也因为网上大部分是用的linux作为实验环境,最重要的也是因为我没有能够仔细看清楚运行环境和相应的操作,导致碰壁无数,就想着把这么个东西写出来,为后面的人减少碰壁的次数吧。
另,本文大体框架借鉴http://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications/
另,参考资料:
https://stackoverflow.com/questions/3913335/debugging-android-app-with-jdb-attach-or-jswat
http://www.zhimengzhe.com/Androidkaifa/63333.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDB调试Android程序(通过JDB进行代码注入) 的相关文章

随机推荐