安卓逆向014之插桩和栈跟踪和方法抛析(小说软件)

小说插桩(代码注入法)

小tips:

当打开一个APK时,入口点比入口界面执行加载的早

用AK打开案例软件,

按照箭头指示找到“onCreate”方法,此处是入口界面。

在这里插入图片描述


203行,表示此方法调用了10个局部变量寄存器。

204行,参数

206行,代码开始执行的地方。

在这里插入图片描述


右击,插入代码—Log信息输出。


在这里插入图片描述

点击之后是这样的,

在这里插入图片描述


随便输入点字,

208行,是定义一个V0,

210行,V0去调用LogStr函数

在这里插入图片描述


此时不要忘记先保存。

接着点击AndroidManifest.xml,选择application。

在这里插入图片描述


往右滑,找到android.name,此处即程序入口点。

在这里插入图片描述


打开—com—reader—ReaderApplication.smali	,此处是入口点。

在这里插入图片描述


找到“onCreate”方法,老样子,随便插入一些内容。

注意的是,假设是中文,要转U码。

下图第三个大框内就是插入的代码。

在这里插入图片描述


保存,回编译安装。先打开ddms,在打开刚刚安装的小说(不要做其他操作),

第三步在ddms中找到软件对应的名称,如下图所示。

此时可以在ddms上可以看到程序执行的顺序,先插入的后输入。

在这里插入图片描述


注意的是,假如想要插桩代码的上面是“.locals 0”,

需要把这个0改为1,不然程序会崩溃。

在这里插入图片描述

栈跟踪和方法抛析

栈跟踪


打开模拟器,打开ddms,

打开上边修改后的小说软件,在新开CMD窗口。

输入“adb shell dumpsys activity top”来获取软件的当前页面。

在这里插入图片描述

在ddms选择该小说,过滤一下,

在这里插入图片描述


搜索“System.er”可以找到栈信息“System.ers”。

这里假设没有找打是因为该小说软件的一个bug,需要卸载了重装一下。

再次打开安装后的软件就可以找到了。

在这里插入图片描述


这些栈信息是从下向上阅读的。我们回到AK的入口。

随便找个方法插入一下,注意要在“.prologue”下边,因为“.prologue”是方法开始的地方。

在这里插入图片描述


我们插入了4行代码,

8行,new一个实例V0.

10行,定义一个V1寄存器

12行,初始化V0,V1

14行,去调用V0,打印栈跟踪。

在这里插入图片描述


这里我们使用到两个寄存器,上边有两个寄存器,我们就不用修改了。

在这里插入图片描述


回编译,安装,打开,添加过滤器进行搜索。

在这里插入图片描述


打印这个“print trace”是为了方便查看上下层的调用逻辑。

我们获取到这个时间,

在这里插入图片描述


在这个时间点,找到。

在这里插入图片描述


这里就可以看到,我们打印“print trace”是loadData函数调用的,

即上边我们插入的loadData函数,

在这里插入图片描述


这个loaddata被onCreate调用,onCreate被perfor..调用等等。

程序从上向下执行,分析是从下向上分析。

方法抛析

其实没什么神秘的,这就工具的使用,多操作几遍即可。

在这里插入图片描述
大粉框内两个选择的意思分别是:

	
	~自动过滤,方法数有限,限制了1000个方法,

	~1000个方法以内就打印,超过了就不打印了。


打印所有的信息,正常我们选择第一个就够了。

选择完“ok”,我们输入任意账户密码和正确的验证码,点击“登陆”。

在这里插入图片描述

返回在次点击这个红点按钮来停止,之后静等几秒,

在这里插入图片描述

弹出一个这样的图,

在这里插入图片描述


这张图就是刚刚方法抛析的一个逻辑,上述整个过程要快,

就刚刚点击了一下登陆,就调用了500+的方法,所以一定要快。

在这里插入图片描述


我们点击第一个方法,

在这里插入图片描述


可以看到此方法没有父节点,但是很多的子节点。

(每个方法是从父节点过来的,然后执行子节点)

先执行此方法,即执行完此方法执行“ 18 ”方法,

分析一波,我们是点击的登陆,所以直接找“Onclick”方法。

在这里插入图片描述


当然,我们也可以搜索一波“login”

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43970718/article/details/120028754