Android逆向小技巧①:从Activity下手找到切入点,逆向分析支付宝APP

时间:2024-05-22 08:34:47

明确目标

关于Android应用的解包、反编译,在网上已经有无数文章了,此处不再赘述。当你已经使用 【d2j-dex2jar】 和 【jd-gui】 得到了APK反编译后的JAVA代码,面对庞大的代码如何着手去分析,不妨先从Activity入手,快速定位关键代码所在的包。

获取Activity名

Android逆向小技巧①:从Activity下手找到切入点,逆向分析支付宝APP

比如我们要分析支付宝收钱二维码的相关功能,就在手机上打开相应界面,然后借助adb工具获取该Activity的名字和路径。adb工具尽量使用最新版Android SDK中自带的adb工具。

Android 8.1以前这样获取:

adb shell dumpsys activity | findstr “mFocus”

Android 8.1以后:

adb shell dumpsys activity | findstr “mResume"

执行后得到结果

mResumedActivity: ActivityRecord{67aeb76 u0 com.eg.android.AlipayGphone/com.alipay.mobile.payee.ui.PayeeQRActivity t1811}

于是我们可以快速定位到到代码 com.alipay.mobile.payee.ui.PayeeQRActivity
Android逆向小技巧①:从Activity下手找到切入点,逆向分析支付宝APP

定位按钮响应函数

接下来我们想搞清楚点击【设置金额】后,支付宝做了什么事情,与服务器进行了什么通信
我们需要Android SDK自带一个工具【Android Device Monitor】( 位于路径【tools\monitor.bat】)来分析界面元素
Android逆向小技巧①:从Activity下手找到切入点,逆向分析支付宝APP
先Dump屏幕,然后点击【设置金额】按钮,接下来就可以看到这个Button的resource-id为

com.alipay.mobile.payee:id/payee_QRCodePayModifyMoney

这个按钮的id为 payee_QRCodePayModifyMoney 就是我们在Android开发中经常用到的

findViewById(R.id.payee_QRCodePayModifyMoney);

接下来我们在源码中搜索 payee_QRCodePayModifyMoney
Android逆向小技巧①:从Activity下手找到切入点,逆向分析支付宝APP
迅速定位到代码:

this.Z = ((AUTextView)paramBundle.findViewById(R.id.payee_QRCodePayModifyMoney));

接下来查找this.Z的引用:
Android逆向小技巧①:从Activity下手找到切入点,逆向分析支付宝APP
在这里设置了OnClick响应函数:

this.Z.setOnClickListener(new bd(this));

顺藤摸瓜找到目标函数:
Android逆向小技巧①:从Activity下手找到切入点,逆向分析支付宝APP
接下来通过进一步静态分析代码,或者使用Android smali调试器进行调试,就可以分析出这个按钮点下去以后,支付宝做了什么事情。然后就可以干更多 Interesting 的事情,比如自行编码模拟执行,编写Xposed模块拦截结果,等等。

但是在实战过程中,你会发现有的APP找到的 resource-id 在反编译的源码中搜索不到,很可能是该 id 已经在代码中数字化,具体解决方法请看下一篇文章:

《Android逆向小技巧②:从Activity下手找到切入点,逆向分析微信APP》

关于Android无源码调试第三方应用看这里:

《Android应用逆向——最好用的两个无源码调试器》



本文由encoderlee发表于****博客: https://blog.****.net/CharlesSimonyi/article/details/90645554 转载请注明出处