现在的位置: 首页 > 综合 > 正文

安卓android下动静态逆向配合的一般步骤

2018年02月11日 ⁄ 综合 ⁄ 共 1108字 ⁄ 字号 评论关闭

一、静态反编译

一开始我是直接用android逆向助手的,一般新手推荐用这个。后来,对其重打包和签名要分开单独操作不爽,就自己写bat来解包、打包、签名。

然后,jd-gui可以看反编译出来的java代码,但是搜索什么的都不方便。

mac下我用Atom(https://atom.io/)去看和查找,用起来非常顺手。

windows下我用notepad++,查找也是挺方便的。

静态逆向的大部分操作其实就是查找,所以有个好的查找工具方便很多。

二、动态调试

在看雪有一篇文章《反编译apk+eclipse中动态调试smali》有详细设置步骤,跟着做即可。

基本上就是字符串配合条件断点等找到关键位置。

这里注意的是,一些品牌的手机在真机调试中会遇到各种问题,比如说华为机器不输出logcat,要进入工程模式打开log开关。其它手机出现各种不能真机调试的都可以网上查查,一般进入工程模式,里面一般有设置调试的选项。


三、界面逆向

界面逆向用android-sdk自带的hierachyview.bat来查看,运气不好只能找控件ID,然后到代码里搜索;运气好的话可以定位到控件的变量名。

无论运气好不好,拿到了控件变量名就可以静态搜索关键位置,配合动态断点来定位代码了。

四、逆向思路

一般快速定位基本是字符串或者界面入手。

最近我在分析一款外国的软件某个核心算法,那软件界面那叫一个简洁(没办法,现在都推崇:简即是美)。

整个app就没几个字符串,所以只能从界面入手。用hierachyview.bat找到了控件的变量名,然后找到调用代码,下断点,看堆栈,慢慢找到底层核心算法的位置。

五、遭遇四大组件

从界面一路分析下来,极大可能遇到android四大组件传输数据的阻拦。

这时候,可以动态打断点看堆栈,运气好的话能继续下去。

但有时候死活不触发想要的逻辑,这样堆栈里就没办法找到下一层的调用。这时候,别死脑筋动态分析到底,这篇文章可是把动静态逆向配合一起讲的。

我们可以通过“类名+函数名+参数类型和个数”查找调用的地方,方法如下:

比如说,有个函数是 

public void setXXX(int a, int b)

但是动态的死活都不没断到这个函数里,其实,调用这个函数的smali语法如下

invoke-static {v1, v2}, Lcom/xyz/smali/j/k;->setXXX(II)V 

我们就在反编译出来的smali目录下,搜索 com/xyz/smali/j/k;->setXXX(II)V 

搜索出来的十有八九就是调用的地方了。

后记:

今天逆向了一天的算法,简单把心得总结下。

有需要的可以加扫描左边的头像二维码,加我微信一起探讨。

微信号:boxertan

抱歉!评论已关闭.