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

一、静态反编译


一开始我是直接用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





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值