安卓逆向笔记-逆向思路教程
- 格式:docx
- 大小:306.31 KB
- 文档页数:5
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-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逆向⼯具篇—反编译⼯具的选择与使⽤作者 | 天天记⼩本⼦上的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
⼀、下载并打开
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引⽤。
逆向重打包闪退思路逆向重打包(repacking)是一种将已经打包好的应用进行反向操作,以便对其进行修改和重新打包的技术。
而闪退则是指应用在运行过程中突然退出的情况。
当我们进行逆向重打包时,有时候会遇到应用闪退的问题,这会给我们的工作带来一定的困扰。
下面,我将分享一些思路和方法来应对逆向重打包闪退问题。
1. 查看日志:首先,我们需要查看应用的日志,以便了解具体的闪退原因。
在Android开发中,我们可以通过adb命令来获取应用的日志信息。
使用以下命令可以打印应用的日志到控制台:adb logcat这样我们就能实时查看应用的日志信息,从而获取更多关于闪退的详细信息,如异常堆栈、错误消息等。
根据日志信息,我们可以获取一些线索,帮助我们定位问题。
2. 分析日志:在查看日志的基础上,我们需要进行日志分析,以便找出导致闪退的具体原因。
首先,我们可以搜索关键字"Crash"或者"Exception"等,来定位相关的错误信息。
其次,我们可以根据错误堆栈日志,找出异常触发的具体位置。
对于Java应用,通常异常堆栈提示的是具体的类名、方法名以及行数。
通过分析堆栈信息,可以了解到哪个类的哪个方法中出现了异常。
从堆栈信息中,我们可以进一步分析异常的类型,并与代码进行对比,找出潜在的问题。
3. 检查资源文件:有时候,应用的闪退可能与资源文件有关。
例如,使用了一个不存在的资源ID或者引用了一个无效的资源。
这可能导致在应用启动时出现崩溃。
所以,我们需要检查应用中的资源文件,确保所有的资源文件的ID和引用都是有效的。
4. 检查权限:在重打包应用时,有时候会修改应用的权限配置。
如果某个权限被修改了,但是应用的代码或者其他组件中依赖了这个权限,就可能导致应用在运行时崩溃。
因此,我们需要检查权限配置,并与代码进行对比,确保权限的修改没有影响到应用的正常运行。
5. 运行环境问题:有时候,应用在特定的运行环境下可能会出现闪退问题。
教我兄弟学Android逆向09IDA动态破解登陆验证上⼀篇《》我带你熟悉了IDA⼯具的使⽤,并且⽤IDA爆破了so层的签名校验我给你布置的课后作业你也⽤上节课的⽅法做出来了看你上节课学习的不错那么这节课给你带来IDA动态调试so的教程。
你看着我激动地说⼤哥,本节课我已经期待很久了,终于来了!!我要认真听课!要么学!要么不学!学和不学之间没有中间值不学就放弃,学就要去认真的学! --致选择下⾯开始今天的教程:⾸先把⿊宝宝apk安装到⼿机上随便输⼊⼀个⽤户名和密码程序弹框“登陆失败” 于是在jeb中搜索登陆失败发现搜索不到于是猜想字符串可能是在so中于是开始分析:注:⿊宝宝apk可在附件下载。
⼀ JEB反编译APK 静态分析Java代码关于JEB的使⽤教程可以看番外《》1.jeb打开⿊宝宝.apk 打开AndroidManifest.xml查看程序⼊⼝这⾥ android:debuggable="true"表⽰此apk可以动态调试如果是false动态调试的时候需要改成true,否则不可被动态调试。
<ignore_js_op>2.找到MainActivity⼊⼝类并反编译成java代码通过静态分析java代码可知⽤户在输⼊⽤户名和密码后程序会调⽤Native⽅法check来校验⽤户名和密码是否正确。
<ignore_js_op><ignore_js_op>⼆ IDA静态分析找位置1.解压⿊宝宝软件找到lib\armeabi\libJniTest.so 并⽤IDA打开找到check函数并分析此函数,不会⽤IDA的请从前⾯课程开始学起<ignore_js_op><ignore_js_op>⼩结经过以上分析在输⼊⽤户名和密码后程序会调⽤libJniTest.so中的check⽅法校验⽤户名和密码是否正确如果正确check⽅法返回字符串登陆成功,否则返回字符串登录失败。
逆向⼯程核⼼原理读书笔记(1)
⼯具
OllyDbg免费的win32专业调试⼯具。
IDA Pro收费的专业调试⼯具,功能强⼤。
设置“⼤本营”的四种⽅法
(1)goto命令快捷键是ctrl+g,⽬前就会根据地址找来找去,应该还有其他⽤法。
(2)设置断点,快捷键F2.在觉得重要的点设置断点,下次可以直接CTRL+F9运⾏到断点⾃动停⽌。
(3)注释,快捷键是;必须是英⽂的分号。
(4)标签,快捷键是:也必须是英⽂的冒号。
快速查找代码的四种⽅法
(1)代码执⾏法
(2)字符串检索法;⿏标右键查找:所有字符串引⽤。
(3)API检索法⼀:在调⽤代码中设置断点。
(4)API检索法⼆:在API代码中设置断点。
修改字符串的两种⽅式
(1)直接修改字符串缓冲区。
有点事简单直观,缺点修改后的字符串不能⽐原字符串长。
(2)在其他内存区域建⽴字符串,并传递给引⽤函数。
优点是可以任意修改,缺点是传递过程设置⽐较复杂。
⼀些快捷键和汇编指令
ctrl+e编辑数据
space编辑汇编代码
call xxxx 调⽤xxxx处的函数
jmp xxxx 跳转到xxxx处
push xxxx 将xxxx保存到栈中
retn 跳转到栈中保存的地址。
一、修改软件名称
在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)。