快速定位关键代码

栏目:技术教程 发布时间 2020-10-16 人气 

来源:https://www.y4f.net/203336.html

TAG:无

侵权:admin@heimacode.com

免责声明:本文图片引用自网络,如有侵权请联系我们予以删除

黑码网发布此文仅为传递信息,不代表黑码网认同其观点。

简介:APK的特点1.在学习定位技巧之前,先分析一下APK的3个特点:(1)每个APK文件中都包含有一个AndroidManifest.xml文件,它记录着软件的一些基本信息。(2)一个Android程序包含一个或多个Activity组成,不同的Activity实现不同的功能。每个Android程序有且只有一个主Acitivity。隐藏程序除外,它没有主Acitivity。每个Activity都是And...

APK的特点


1.在学习定位技巧之前,先分析一下APK的3个特点:
(1)每个APK文件中都包含有一个AndroidManifest.xml文件,它记录着软件的一些基本信息。
(2)一个Android程序包含一个或多个Activity组成,不同的Activity实现不同的功能。每个Android程序有且只有一个主Acitivity。隐藏程序除外,它没有主Acitivity。
每个Activity都是Android程序的一个显示页面,负责数据的处理及展示的工作。
(3)鉴于Application类启动的时机很早,一些授权验证的流程可能存在于这里,所以需要着重注意Application。


定位关键代码的方法


一个完整的Android程序反编译后的代码量可能非常庞大,要想在这浩如烟海的代码中找到程序的关键代码,是需要很多经验与技巧的。总结有以下6种定位关键代码的方法:

1.信息反馈法(资源id/字符串)
所谓信息反馈法是指根据程序运行时给出的反馈信息作为突破口,定位关键代码。例如错误提示,运行提示等等,可以在程序中直接搜索字符串。
当提示信息存在于String.xml资源文件中时,我们可以根据R.java的映射文件,查找对应的资源id ,然后在smali或者在IDA窗口进行搜索。

2.特征函数法(api函数)
这种定位代码的方法与信息反馈法类似。在信息反馈法中,无论程序给出什么样的反馈信息,终究是需要调用相关API函数来完成。比如弹出注册码错误的提示信息就需要调用Toast.MakeText().Show()方法。

3.顺序查看法(分析程序执行流程/病毒分析)
从AndroidManifest.xml中找到主Activity界面,逐行顺序分析代码,掌握软件的执行流程,通常在分析病毒软件时使用。

4.代码注入法(插入log/查看logcat/分析加解密)
代码注入法又叫做插桩,即在关键反汇编代码处,插入可以输出logcat调试信息的代码,这种方法在解密程序数据时经常使用。

5.栈跟踪法
栈跟踪法属于动态调试方法,原理是输出运行时栈调用跟踪信息,然后查看函数调用序列,来理解方法的执行流程。

6.Method Profiling(方法剖析)
要用于热点分析和性能优化。除了可以记录每个函数占用的CPU时间外,还可以跟踪所有的函数调用关系,并提供比栈跟踪法更详细的函数调用序列报告。

实战去除RE文件管理器广告


RE文件管理器是一款用来管理系统文件的工具,该工具需要root权限,逆向分析应用程序时使用它来管理相关文件。不过该工具存在每次关闭程序都会打开一个广告界面的缺点。

此时我们要对RE文件管理器进行判断,判断它是否可以进行后续分析,实现想要的功能。

1.查壳:
先使用查壳工具进行查壳,会发现“shell”一栏显示“此apk未采用加固或为未知加固厂商”,这表示该APK没有加壳,如下图所示,如果显示该APP加壳了,在目前阶段就果断选择放弃。

2.重新签名:
接下来打开签名工具,将RE文件管理器拖进来重新签名,如下图所示,重新签名好后会弹出一个弹窗,在这里点击“否”,如下图所示,随后生成了一个“RE文件管理器_Signed.apk”文件,打开雷电模拟器安装运行,发现程序可以正常运行。如果程序报错或者闪退就选择放弃,说明存在签名验证。

   

3.反编译该APP分析程序逻辑

在“工程管理器”中打开“AndroidManifest.xml”文件,找到程序入口界面的“android:name”属性的值“com.kkkpppxzn”,如下图所示

根据该值找到对应的smali文件,找到“onCreate”方法,如下图所示

在指令开始位置按“鼠标右键”=》“插入代码”=》“toast输出”
选项插入Toast弹窗,保存。回编译,安装运行,发现程序可以正常运行。如下图所示。如果程序崩溃或者闪退就选择放弃。说明存在文件校验。

注意:当字符串等关键信息搜不到时,可以从三个方向考虑:

1.字符串在so层。
2.字符串被加密。
3.结合了服务器,服务器返回,本地显示。

4.去除RE文件管理器关闭程序时的广告信息

总的来讲,分四个步骤操作。

第一步:获取该APP的主页活动信息:
点击左下角“windows”图标;运行cmd命令;执行“adb shell dumpsys activity top”命令;获取“com.speedsoftware.rootexplorer
/.RootExplorer”信息,如下图所示

第二步:根据获取到的信息在“工程管理器”中找到这个类,浏览该类的相关方法。
“onDestroy”方法是在关闭APP时被执行的,而且广告信息是当前活动界面消失之后再弹出的,由此我们可以判断广告的相关逻辑必然是“onDestroy”方法里实现的。但“onDestroy”方法的逻辑比较多。

第三步:获取广告界面的信息:
点击左下角“windows”图标运行cmd命令,执行“adb shell dumpsys activity top”命令获取“com.speedsoftware.rootexplorer/com.
AddDouDouWall2.WebPageDownLoadMainActivity”信息,如下图所示

通过阅读smali代码,看到在“onDestroy”方法中的第五个dalvik指令中有广告活动界面信息(“const-class v1, Lcom/AddDouDouWall2/WebPage
DownLoadMainActivity;”),继续阅读smali代码,发现第七个dalvik指令中有(invoke-virtual {p0, v0}, Lcom/speedsoftware/rootexplorer/
RootExplorer;->startActivity(Landroid/content/Intent;)VstartActivity方法的调用。这条指令就是我们要获取的信息,将这条指令进行注释,即可去除广告,如下图所示

最后,回编译,安装运行。再关闭程序,发现没有跳转到广告界面,说明成功去除了RE文件管理器的广告信息。

小结:


1、定位关键代码的技巧
(1)信息反馈法(资源id/字符串)
(2)特征函数法(api函数)
(3)顺序查看法(分析程序执行流程/病毒分析)
(4)代码注入法(插入log/查看logcat/分析加解密)
(5)栈跟踪法(动态调式/函数调用流程)
(6)Method Profiling(动态调式/热点分析/函数调用流程)

2、快速定位的步骤:
(1)反编译 apk。
(2) 通过 AndroidManifest.xml 查找主 Activity。
(3)查看程序的入口方法:主 Activity 的 onCreate()方法。
(4)查看 Application 类(全局类,早于其他类启动)的onCreate() 方法,该方法通常用作授权检测。

汽车产业发展 摩羯 黑洞 口吃 业界 射电 天行 含量 覆铜板 徒弟 报告 受控 小数点 支票 内联 以其 转义 涂覆 流量控制 副驾驶 分机 来做 像我一样 管理员 国光 伪装 宽频 式子 卖空 账户 点亮 繁星 开弓不放箭 拖拉机 快车道 女友 劈腿 家具市场 付出 软件更新 过滤网 有耐心 点着 加快 子宫 没想到 小图标 封测 融合 顶楼 非门 城乡居民 成形 即日 中央政治局 心愿 铜陵 蚌埠 维修人员 鸿海 第二轮 底纹 服务热线 静态 电磁干扰 中枢 离线 如流 脚蹬子 只能 重装 想念 火星 多余 免责声明 什么地方 草屋 实况 联电 永久免费 粉底 飞车 交换机 凝胶 出芽 除息 记忆体 全彩 首次 密封 普陀区 内涝 油烟 恩仇 溅落 再也 药物 示范工程 发放 经营范围
资源来源网络,若未解决请查看原文

本文地址:https://www.heimacode.com/article/60393.html