记一次简单反编译
背景:想看某款收钱软件播放取消订单语音的逻辑。
步骤
- 下载该软件apk 解压找到raw目录找到对应语音文字名字。cancel.order.ogg
-
安装该软件走一遍流程看在那几个界面会播放该语音。使用adb shell dumpsys activity top命令
查看Activity和fragment名称记录这两个类一般不会混淆这里是ScanFragment
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell" cid="n11" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; page-break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; background-position: inherit inherit; background-repeat: inherit inherit;">Added Fragments:
0: ScanFragment{7bbcbf6 #0 id=0x7f0900ff}
FragmentManager misc state:
mHost=android.support.v4.app.FragmentActivityHostCallbacks@95efbf7
mCurState=4 mStateSaved=false mStopped=false mDestroyed=false</pre> -
利用jeb2工具逆向静态分析代码 在Dex的smali中command+F搜索ScanFragment 按Q转成java
下面就是看这些混淆代码分析的艰难过程了 。慢慢分析到请求终端信息-> 生成订单->条码支付
后面发现是在PayResponseFragment中播放语音 但是只有收款成功的语音。
- 类似上步骤搜索cancel.order 转java 找到了PushIntentService。找到调用语音处接口 按O查看复现方法 。按X查看调用处 发现两个地方调用到了这个方法 一个是语音设置界面 一个就是PushIntentService处
- 找到语音设置界面找到按钮点击确实播放了取消语音。 这里初步判断是靠推送播放语音的 后面没仔细分析了。
网友评论