安卓逆向笔记-逆向思路教程
Android逆向助手使用说明

1、“源文件”处支持文件或文件夹拖放;
2、必须安装【.NET Framework2.0简体中文版】框架;
3、部份功能依赖java运行环境,因此必须安装java。
12、替换dex;
13、修复dex;
14、加密xml转txt;
15、字符串unicode编解码。
更新日志
v2.1主要修改:
1、部份功能新增错误回显;
2、修复java环境判断错误的bug;Android逆向助手是一款针对安卓平台的强大逆向辅助软件,功能涵盖apk反编译打包签名;dex/jar互转替换提取修复;so反编译;xml、txt加密;字符串编码等。支持直接将文件拖放到源和目标文件,不用每次都点浏览选择。软件暂时支持WinXP、Win7、Win2003系统。
功能介绍
1、反编译apk;
2、重新打包成apk;
3、对apk进行签名;
4、反编译dex;
5、重新打包成dex;
6、dex转jar;
7、dex转ddx;
8、dex导出成txt;
9、反编译so;
10、jar转dex;
11、提取dex;
软件逆向工程原理与实践第8章Android应用程序逆向分析

第8章 Android应用程序逆向分析
(3) AndroidManifest.xml:Android配置文件,编译过程 依然被转换为AXML格式;
第8章 Android应用程序逆向分析
8.2.1 APKTool APKTool是Google提供的APK反编译工具,可安装反编
译系统APK所需要的framework-res框架,能够反编译APK, 并且可以清理上次反编译文件夹。
安装和使用步骤如下: (1) 配置Java运行环境; (2) 下载并安装APKTool; (3) 打开Windows命令窗口;
APKTool的所有操作均在Windows命令窗口中输入 “apktool”命令来查看。操作完成后,可以得到应用程序的 资源文件,smali文件和Manifest.xml文件。直接点击 Manifest.xml文件可以在浏览器中查看相关信息。
第8章 Android应用程序逆向分析
8.2.2 dex2jar dex2jar也是一款开源软件。它集成了Java库,可将原本
第ali反汇编得到smali文件,阅读反汇编出 的smali文件。
(2) 使用dex2jar生成jar文件,再使用jd-gui生成Java源代 码,阅读生成的Java源代码。
(3) 使用JEB、APK Studio等高级工具。
第8章 Android应用程序逆向分析
第8章 Android应用程序逆向分析
4.反编译APK获取Java源码并分析 将应用程序反编译成可读的Java源码,然后审查该代码, 了解应用程序的所有行为。在此过程中,分析源码审查开放 的端口、共享/传输的数据,以及Socket连接等是关键的考量。 根据8.2节介绍的方法,首先对APK文件进行解压(或修改后 缀解压),从中提取出classes.dex文件;使用dex2jar工具,将 classes.dex文件转换成jar文件,如图8-11所示;然后,使用 jd-gui分析这个classes.jar文件,如图8-12所示。
Android逆向分析工具与方法

1Android分析工具1.1分析工具经过试验,推荐的工具为:模拟器可以使用逍遥安卓;反编译,编译,smali代码注入,APK签名等等可以使用Android Killer;开发IDE可以使用Android Studio;一般的反编译和运行APK可以使用Android Killer + 逍遥安卓,注意连接逍遥安卓模拟器的方法是使用adb connect 127.0.0.1:21503,最好使用逍遥自带的adb工具。
1.APKtoola)直接编译和反编译APK文件;b)到smali语言级别;c)可以解析二进制的AndroidManifest.xml文件2.APKStudio图形界面的apktool;3.APK IDE小米出的apk反编译,打包集成工具,类似ApkStudio;集成了jd-gui,dex2jar等;4.android Killer集成了apktool,dex2jar, jd-gui等工具,同时支持搜索,类方法提取,代码插入等工具;同时支持动态连接android devices,自动编译,签名,安装,运行程序等操作。
易用性上,这几类工具的排名是:AndroidKiller> APK IDE >APKStudio>APKTool.5.JEB反编译工具,商业的,效果据说比开源的要好;6.Dex2jar可以直接把classes.dex转换成Jar包,内部是把Dalvik字节码转换成了Java字节码;7.enjarifygoogle自己出的工具,把dhttps:///google/enjarify/8.jad把某个.class文件转换成源码形式,本质是把Java字节码转换成java源码;9.jd-gui本质上和jad一样,但是是图形界面的,并且可以批量反编译整个Jar包文件;10.androguard包含了许多工具,可以对某个APK文件进行测绘,比如权限信息,函数调用图,指令级别的函数调用图,交互分析环境;11.IDEa)Eclipseb)AndroidStudioc)IDEA12.JDBa)JDK自带的调试JAVA程序的调试器,可以用来调试APK;13.IDA14.Mercury,现在改名叫Drozera)是一个渗透测试工具;15.Androguarda)一堆python脚本工具;b)有一个可以生成函数调用图;1.2分析平台系统1.2.1Santoku本质是一款Ubuntu Linux系统,上面集成了各种Android工具,包括开发,逆向,渗透测试,恶意代码分析等各个安全方向。
小肩膀安卓逆向--002-006

⼩肩膀安卓逆向--002-006002.什么是安卓逆向1. 如果数据包不是加密的,例如⽹页端爬取⾖瓣评分250,数据是可以伪造的,可以轻易构造http请求,就不需要逆向。
2. 如果数据包是加密的,例如某些app登录页⾯,你进⾏抓包,密码会进⾏加密,还会有⼀个加密的sign值,你⽆法构造数据包,⽆法进⾏爆破操作。
就需要逆向。
重点在于逆向加密的算法。
003.Windows注意事项1. 系统版本:讲师使⽤的是win10 专业版20H2,我们可以运⾏winver查看系统版本,不要使⽤任何的精简版系统。
2. 启⽤超级⽤户:启⽤Administrator3. 基本配置:左⾯右键->个性化->主题->桌⾯图标设置->此电脑此电脑->查看->⽂件扩展名windows更新->开发者选项->从任意源安装应⽤4. 计算机名不要有中⽂5. 路径不要有中⽂、空格、特殊符号004.Windows cmd 005.环境变量1. cmd的打开⽅式开始->右键->运⾏->cmdwin+r,输⼊cmd指定⽬录快捷打开cmd:在路径栏输⼊cmd2. cmd基本操作dirclscdcmd中运⾏⽂件(可以把⽂件拖⼊cmd)上下键选择之前输⼊过的命令tab补全右键复制/粘贴3. 相对路径和绝对路径4. 环境变量系统变量和⽤户变量环境变量的作⽤006.Windows terminal1. Windows Terminal安装与打开安装:微软商城、github打开:右键菜单、win+r 输⼊wt、路径栏输⼊wt设置默认shell、调整shell顺序、增加新的shell2. 主题配⾊主题颜⾊配置⽅法 json配置⽂件json⽂件位置:C:\Users\⽤户名\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\setting.json 主题配⾊⽹站:,复制后粘贴到配置⽂件的schemes中使⽤配⾊⽅案,在设置菜单中就可以选择3. 常⽤快捷键新选项卡:ctr+shift+d划分窗格:alt+shift+加号(上下划分)、ctr+shift+减号(左右划分)关闭窗格:ctr+shift+w调整窗格:alt+shift+⽅向键窗格切换:alt+⽅向键。
Android逆向工具篇—反编译工具的选择与使用

Android逆向⼯具篇—反编译⼯具的选择与使⽤作者 | 天天记⼩本⼦上的lilac 来源 | CSDN今天给⼤家介绍⼀下Android App 在Java层的逆向⼯具。
逆向⼯具的介绍在过去,当我们想要了解⼀个 app 内部运作细节时,往往先通过 ApkTool 反编译 APK,⽣成 smali 格式的反汇编代码[1],然后⼤佬和⽼⼿直接阅读 smali 代码,适当的进⾏修改、插桩、调试,经过⼀定的经验和猜想,理解程序的运⾏逻辑和加解密细节,⽐如如下的 smali 代码。
smail我们只要先这样,再那样,最后再这样,对对对,就这样,⼀个程序的加密就被破解出来了。
是不是迫不及待想来⼀次App的逆向之旅了?事实上,这种⽅式对⼩⽩实在不友好,有没有更加友好的⽅式呢?当然是有的,如果你百度或者 google 搜索逆向相关的教程和分享,很容易就会发现下⾯这三个⼯具。
在介绍⼯具之前,我们先补充⼀下APK结构的知识,我们以伊对这个社交 Apk 为例。
APK ⽂件其实是⼀种特殊的 zip 格式,我们可以直接⽤ 360 压缩或者别的压缩⼯具打开。
为了满⾜⾃⾝的功能和设计,⼏乎每⼀个都会在基础的⽂件结构上添加不少东西,但有六个部分是不变的,我们罗列和称述⼀下。
⽂件或⽬录作⽤META-INF/描述apk包信息的⽬录,主要存放了签名信息,配置信息,service注册信息res/存放apk资源⽂件的⽬录,⽐如图⽚、图标、字符串、样式、颜⾊assets/同样是存放apk资源⽂件的⽬录,但和res有差异,和我们关系不⼤resources.arsc资源索引,包含不同语⾔环境中res⽬录下所有资源的类型、名称与ID所对应的信息lib/存放so⽂件,越来越多的应⽤由C/C++编写核⼼代码,以SO⽂件的形式供上层JAVA代码调⽤,以保证安全性,这个⽬录是逆向解密关注的重点classes.dex(⼀个或数个)Android程序运⾏在Dalvik虚拟机上,⽽dex就是Dalvik虚拟机的可执⾏⽂件, 相当于Windows平台中的exe⽂件,通过反编译dex,可以获得apk源码(这个说法不很准确,但⽅便理解)AndroidManifest.xml清单⽂件,包含了App⼤量的的配置信息,⽐如包名、应⽤需要拥有的权限(打电话/录⾳/⽹络通信等等)、以及所有的界⾯和程序组件的信息,⽆法解压apk时直接打开,因为清单⽂件在apk打包过程中被编译成了⼆进制格式⽂件接下来我们介绍以下反编译⼯具,看⼀下反编译⼯具的作⽤⼯具作⽤ApkTool解析resources.arsc,AndroidManifest.xml等⽂件,反编译dex⽂件为smali源码Dex2jar将dex⽂件转化为jar⽂件Jd-gui反编译jar,查看java源码⽐如使⽤ Dex2jar+Jd-gui, 最终得到这样的结果。
Android程序反编译工具JEB

Android程序反编译⼯具JEB
⼀、下载并打开
JEB是⼀个付费的逆向⼯具,专业版售价⾼达1800美元,此分享仅供学习使⽤,切勿⽤于商业盈利。
下载并解压后,找到jeb_wincon.bat,双击这个批处理程序。
会依次出现⼀个命令⾏窗⼝和JEB程序窗⼝
不⽤在意那个“检查更新出错”,不影响正常使⽤。
⼆、简要介绍
JEB是⼀个功能强⼤的为安全专业⼈⼠设计的Android应⽤程序的反编译⼯具。
⽤于逆向⼯程或审计APK⽂件,可以提⾼效率,节约⼯程师的分析时间。
①可将Dalvik字节码反编译为Java源码,⽆须DEX-JAR转换⼯具
②JEB强⼤的⽤户界⾯使你可以检查交叉引⽤,重命名的⽅法、字段、类、代码和数据之间导航,以及做笔记和添加注释等
③可以检查解压缩的资源和资产、证书、字符串和常量等。
可以保存对JEB数据库⽂件的分析,通过JEB的修订历史记录机制跟踪进展。
④JEB⽀持Windows、Linux和macOS
⑤使⽤Java或Python语⾔,⽤户可以编写⾃⼰的脚本和插件来⾃动执⾏逆向⼯程流程。
⾼级⽤户可以编写完整的分析模块。
三、参考书籍
《Android⾼效进阶:从数据到AI》第9章静态分析Android引⽤。
科锐逆向笔记非常好的逆向学习材料 PPT课件

பைடு நூலகம்
归 并
debug
release
Fun2参数 不连续不能
2020/4/7
归并
6
2010_年4月_8日
Copy代码
在IDA中找到感兴趣的函数后,进入函数体内,将对应的汇编代码COPY 出来,放到汇编建的dll工程下,要注意分析清楚其调用方式以便做正确声明
函数申明 IWillCopyCode proc C Value1:DWORD 将代码COPY这里,修改crt_(c库函数) ret
IWillCopyCode endp
然后将函数名放.def文件中作导出申明
EXPORTS
IWillCopyCode
在VC工程中增加编译后的lib文件,声明函 数类型 extern “C” 调用方式 函数名称…
软件逆向分析
V0.1
整理科锐课程内容
说明:主要针对VC下的逆向分析 使用工具 VC、OD、IDA
2020/4/7
1
2010_年4月_8日
识别main函数
在函数开始的第一个3个push下面的call就是main函数, WinMain是4个push后面跟的call就是WinMain。
因为在main函数之前的函数没有3个和4个参数的,main函 数后面就是exit退出函数。
add esp,xx/ mov esp, xx
push 寄存器(少量空间)
pop ecx
说明:对于需要少量的内存空间则使用push申请,push后没有对 应的pop做恢复,则是申请空间;同样有pop的,前面没有push与 之配对,则是释放栈空间.
2020/4/7
8
逆向重打包 闪退思路

逆向重打包闪退思路逆向重打包(repacking)是一种将已经打包好的应用进行反向操作,以便对其进行修改和重新打包的技术。
而闪退则是指应用在运行过程中突然退出的情况。
当我们进行逆向重打包时,有时候会遇到应用闪退的问题,这会给我们的工作带来一定的困扰。
下面,我将分享一些思路和方法来应对逆向重打包闪退问题。
1. 查看日志:首先,我们需要查看应用的日志,以便了解具体的闪退原因。
在Android开发中,我们可以通过adb命令来获取应用的日志信息。
使用以下命令可以打印应用的日志到控制台:adb logcat这样我们就能实时查看应用的日志信息,从而获取更多关于闪退的详细信息,如异常堆栈、错误消息等。
根据日志信息,我们可以获取一些线索,帮助我们定位问题。
2. 分析日志:在查看日志的基础上,我们需要进行日志分析,以便找出导致闪退的具体原因。
首先,我们可以搜索关键字"Crash"或者"Exception"等,来定位相关的错误信息。
其次,我们可以根据错误堆栈日志,找出异常触发的具体位置。
对于Java应用,通常异常堆栈提示的是具体的类名、方法名以及行数。
通过分析堆栈信息,可以了解到哪个类的哪个方法中出现了异常。
从堆栈信息中,我们可以进一步分析异常的类型,并与代码进行对比,找出潜在的问题。
3. 检查资源文件:有时候,应用的闪退可能与资源文件有关。
例如,使用了一个不存在的资源ID或者引用了一个无效的资源。
这可能导致在应用启动时出现崩溃。
所以,我们需要检查应用中的资源文件,确保所有的资源文件的ID和引用都是有效的。
4. 检查权限:在重打包应用时,有时候会修改应用的权限配置。
如果某个权限被修改了,但是应用的代码或者其他组件中依赖了这个权限,就可能导致应用在运行时崩溃。
因此,我们需要检查权限配置,并与代码进行对比,确保权限的修改没有影响到应用的正常运行。
5. 运行环境问题:有时候,应用在特定的运行环境下可能会出现闪退问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、修改软件名称
在AndroidManifest.xml 文件<application 标签的android:label 属性中,该属性的值可以直接是一个字符串,或者是字符串资源引用,也可能是直接软件名称。
1、MT管理器arsc 文件中搜索这个ID 改这边的值就可以修改软件名了,另外你也可以直接在AndroidManifest.xml 把@7f0b001f 改成你想要的软件名,但这样软件名就被写死了,不会根据语言环境自动切换。
2、MT管理器arsc直接搜软件名称修改
3、xml文件android:label 属性修改
4、Androidkiller 搜软件名称替换要改成的
流程:
篡改APK名称: APP →AndroidKiller →反编译→工程搜索→输入APP名称→搜索→全部改为新APP名称→编译→模拟器→安装运行
二、修改图标
APP 的图标定义在AndroidManifest.xml 文件中,具体在application 标签的android:icon 属性中。
1、MT管理器:
可以看到这个apk 一共有5 个图标,其实这些图标都一样,只是分辨率不一样。
如果你要修改图标,提前准备好图片资源,把apk 中对应的文件替换掉就行了。
如果你觉得一次要准备5 个不同分辨率的图标进行替换的话不方便,你也可以只替换其中一个,然后在arsc 中把其它四个配置删掉,同时apk 中对应的图标也删掉。
例如你准备的图标的分辨率和apk 中hdpi 的图标分辨率最接近,那么你可以只替换hdpi 所对应路径的图标,然后把mdpi、xhdpi、xxhdpi、xxxhdpi 四个配置都删掉。
这样做完全没问题,即使你的分辨率是xxxhdpi,系统找不到最佳分辨率图标时就会去使用hdpi 的图标,顶多显示时图标比较不清晰。
2、Androidkiller
在META-INF 文件搜/icon.png(经验:图标一般都是png格式)
搜到后找到文件夹目录地址(一般在res文件夹里)(右键打开res文件目录),根据尺寸大小替换图标
技巧一:在META-INF文件夹中的“MANIFEST. MF”文件搜索
技巧二:搜索/icon. Png 而不是icon.
流程:
篡改APK图标:工程管理器→AndroidManifest. xml→
→“application”标签→“android: icon=@drawable/ icon→
“META- -INF"→MANIFEST.MF →搜索“/icon. png→替换图片
三、修改包名实现软件分身、共存
在AndroidManifest.xml 文件
找到<manifest标签packge 属性即为包名
任意修改:删减添加全部修改不能为汉字
(内容提供者,有的软件没有)搜索<provide标签修改android: authorities 属性的值,全部修改。
修改方式和修改packge 属性一样
流程:
修改包名:
工程管理器→“Androi dManifest. xml"→“manifest”标签→package属性的值-→修改→“编译”→回编译→模拟器→安装运行
修改内容提供者:
AndroidManifest. xml→搜索“<provider”→修改android:authorities”属性的值→编译→回编译→模拟器→安装运行
问题注意:
就是程序崩溃了,无法运行
总结一下,有哪几种情况会导致程序无法运行,以及它们对应的解决方案是什么。
★第一种就是只修改APK包名会引发内容提供者冲突,
解决方案就是修改配置文件中所有内容提供者标签
“<provider”里面的“android: authorities" 属性的值
★第二种应用分身的签名信息不同导致无法运行
解决方案是使用相同的签名工具对所有分身APP进行统一签名
★第三种是有些APK在内部使用了包名,只修改包名会导致程序
崩溃
解决方案是全局搜索应用程序包名,查看搜索结果,如果是字
符串就进行替换,将原有的字符串改为修改后的包名,否则不
进行替换。
四、去除广告
1:、单机
xml删网络权限:
最后一个不能删除:APP可能更新导致崩溃
2、去启动页
(1)xml改入口界面
Activity 的配置保存在apk 里面的AndroidManifest.xml 文件中,使用MT 反编译这个文件。
查找入口Activity 我们只需要搜索android.intent.action.MAIN 或者UNCHER 就能快速定位。
当前入口Activity 是WelcomeActivity,其中intent-filter 包裹着的那6 行代码的作用就是让这个Activity 成为入口并显示在桌面上,所以我们把它去掉。
要让MainActivity 成为入口,就给它加上刚刚那段intent-filter。
去掉末尾的/> 换成>,并加上</activity>,然后在它们中间插入intent-filter,最后如下。
注意:如果主入口有intent-filter,这样的,添加android.intent.action.MAIN 和UNCHER就可以。
其他不要删。
(看易锦第九期9)。