android逆向工具
A. 安卓逆向——如何修改APP包名实现应用分身
齐天大圣孙悟空是家喻户晓的神话传说名人,大家都知道他有一个很强大的技能——拿出一根猴毛“biu”一吹实现分身。
那么我们程序猿也和咱们的齐天大圣是同类(开个玩笑),程序猿怎么实现分身呢?我们拔一根头发吹肯定是不好使的……那就是通过修改APP的包名来实现应用分身。也就是说在同一个设备上可以打开两个或多个相同的APP。
一.如何修改APK的包名
那么如何修改apk的包名呢?我们以“薯仔视频为例”来进行一个分析。首先,找到“工程管理器”,打开工程管理器进入界面,点开薯仔视频的下行文件数据
里面有“manifest”这样一个标签,找到这个标签里面的一个“package”属性,这个值就是我们要找到应用程序的包名
第二步,把“package”属性改为“hou”或者“123”等等都可。
这个值我们可以通过删减几个字母或者是任意添加几个字母或数字来进行修改,切记注意只能使用添加或删减数字和字母,不可以用汉字!
建议通过“添加数字或字母实现”,删除容易把握不准,当然删除以后一定要记得保存。 然后点击“回编译”按钮,进行回编译过程
二.如何修改内容提供者
启动模拟器,进行应用安装,然后把我们“回编译”好的拖到模拟器里面
发现安装失败,提示“存在同名的内容提供者”。 错误的原因由于我们只修改了包名,没有修改内容提供者。 那么如何修改“内容提供者”?
搜索结束后显示我们 需要修改的是“provider”里面有个“android;anthorities”的值
修改的方法同修改“package”值的属性是一样的,可以添加或删减字母或者是数字(绝对不能是汉字)
将搜索到的结果进行逐一全部修改,修改完成后千万不能忘记保存
完成之后找到其所在的目录进行安装,方法同样,直接拖进模拟器里面即可
※这里补充一点:有的apk由于没有内容提供者,就只需要一步到位——修改包名就可以直接实现应用分身了。
三.程序无法运行安装及对应解决方案
那么在什么情况下会导致程序无法运行以及安装,它们对应的解决方案是什么呢?
Q 1 · 只修改apk的包名会引发内容提供者冲突
解决方案:
修改配置文件中所有内容提供者的标签“provider”里面“android:authorities”属性的值
Q 2· 应用程序分身的签名信息不同导致无法运行
解决方案:
使用相同的签名工具对所有分身进行统一的签名
Q 3· 有些apk在内部使用的包名只修改包名会导致程序崩溃
解决方案:
全局搜索应用程序的包名查看搜索结果,如果是字符串就进行一个替换,将原有的字符串修改为修改后的包名否则不进行替换
这就是如何修改apk的包名实现应用程序分身的具体方法了,在实际操作中可能会遇到更多的小细节问题,我们要具体问题具体分析。总之多动手多思考多实操,安卓逆向没有什么太难的。当然分享的相关经验,如果有哪处不妥也欢迎在评论区回复讨论或者私聊交流哈。
B. Android逆向 ida动态调试问题
先输入”adb shell”,然后输入”su root”获取root权限。
接着输入” chmod 777 /data/local/tmp/android_server” 给android_server加上相应的权限。
接着输入” /data/local/tmp/android_server”启动android_server。
如下图所示:
输入”adb forward tcp:23946 tcp:23946”进行tcp端口转发
命令,启动所要调试的Activity。
app会弹出”Waitting for debugger”对话框,如下图所示:
点击”Debug options”按钮,在”Suspend on process entry point”, ”Suspend on thread start/exit”, ”Suspend on library load/unload” 等选项的前面打上勾,如下图所示:
点击”ok”后会在以下对话框的hostname中填上”localhost”
在弹出和物的”Choose process to attach to”窗口中找到”com.example.testjniso”进程,选中该进程,然后点击”ok”按钮。
其中可以看到com.example.testjniso进程的端口为8700。
如下图所示:
在ida弹出的”Add map”窗口中,一律点击”Cancle”按钮。
点击ida中的暂停调试按钮,暂停当前的调试,如下图所示:
右击libTestJniSo.so文件,在弹出的隐告框中点击”Jump to mole base”,跳转到libTestJniSo.so文件的起始地址。
按下Alt+T,弹出查找对话框中输入” java_com_example_testjniso_MainActivity_helloFromJni” 如下图所示:
点击”ok”按钮后,即可跳转到 Java_com_example_testjniso_MainActivity_helloFromJni 函数所在的起始地址。
然后在地址处下断点唤携液:
再按F9重新开始调试,点击app中的”点击加载so文件”按钮重新加载libTestJniSo.so,即可看到程序成功地停在了断点处:
到此处就可以正常地调试so文件了。
Linker是什么?
Linker就是/system/lib/linker,它是进程启动时第一个加载的模块,它负责管理elf可执行文件以及各个so文件的加载执行,还参与了调试的一些东西。通俗地说,它是一个elf文件的解释器。它可以加载elf可执行文件及so动态库。
在android 5.0下,不能执行android_server是因为android5.0自带的linker不支持加载非pie的elf文件,但如果自己实现一个可以加载pie的linker,不就可以解决这个问题了吗?对的,就是酱紫,补上自己的自定义linker在附件.
https://bbs.pediy.com/thread-206084.htm
C. Android有什么好的反逆向破解apk的方法或应用
apk进行反编译的,的确是有很多工具的,例如apktool,进行加密的话,在加密技术方面可以进行签名验证还有混淆代码的方式,不过作为一个应用,了解哪有漏大圆纤洞很重要啊,我知道的很多朋友通过爱加密进行加密保护的,爱加密就提供漏洞分析,可以先检测一下你的应用的漏洞,看看安全系数有多少,然后再进行加密保护。希望可以帮到你啦,我知道的也腔拿不多。滚仿
D. Android APP加密方法都有哪些
安卓APP加密的方法主要分成三类:源码加密、数据安全和应用保护,而每一类又分成好几个小项。
源码加密包括:Dex文件保护、防二次打包、so文件保护、资源文件保护。以Dex文件保护为例,Dex文件保护又包括:高级混淆、DEX文件加壳、DEX文件加花、动态类加载、内存防mp。
高级混淆:代码混淆,可以降低代码可读性、缩小包大小。
DEX文件加壳:相当于把源码打包至其他文件夹下,逆向工具对加密后的dex文件解析,只能看到壳文件,可以防止解包后看到真正的源码。爱加密利用挖空技术实现函数级加密,安全强度高,启动效率快。
dex加花:由于大部分逆向工具都是线性读取字节码并解析,当遇到无效字节码时就会引起反编译工具字节码解析失败。爱加密插入无效字节码到dex文件之中,同时保证该字节码永远不会被执行,否则程序运行也会崩溃。这样,就能起到反编译的作用了。
dex动态类加载:爱加密加固后的dex文件源码可以动态分离,在运行时,将源码分段加载到内存当中。
内存防mp:程序运行时会释放代码,内存防mp可以防止程序运行时被劫持。
应用安全包括:log日志输入屏蔽、应用清场。清场技术依赖于云端黑名单、白名单DB,应用每次启动后便自动进行本地的黑名单、白名单DB数据更新,若检测到有异常情况,则可对用户进行提示。
数据安全包括:页面防劫持、本地数据保护、截屏保护、内存数据防查询、协议加密、虚拟键盘。
E. androidkiller是什么软件
Android Killer
一个朋友写的工具,挺方便好用,发到此处,留给新手同学们学习使用。详细信息看下文介绍。
Android Killer 是一款可视化的安卓应用逆向工具,集Apk反编译、Apk打包、Apk签名,编码互转,ADB通信(应用安装-卸载-运行-设备文件管理)等特色功能于一 身,支持logcat日志输出,语法高亮,基于关键字(支持单行代码或多行代码段)项目内搜索,可自定义外部工具;吸收融汇多种工具功能与特点,打造一站 式逆向工具操作体验,大大简化了用户在安卓应用/游戏修改过程中的各类繁琐工作。
主要功能:
1、可视化、全自动的反编译、编译、签名;支持批量编译APK。
2、以树形目录管理反编译出的Apk源码文件,浏览、打开、编辑、都可以统一在软件中实现,不同项目间可以自由切换,方便快捷。
3、自动识别图像资源,并提供该类资源的快捷替换功能,方便修改这类图片资源。
4、内置代码编辑器,支持包含(但不限于).samli、.xml、.html等各类格式文件的语法高亮显示,根据 smali文件格式的自动匹配相应语法;同时支持使用系统编辑器来编辑代码文件。
5、内置基于文件内容的单行或多行代码关键字搜索、可显示无穷多个搜索结果以标签的形式分门别类;可指定搜索范围(整个项目或在指定的文件或文件夹中搜索)、大小写,编码类型;从此无需再借助其他工具,即可轻松的完成搜索任务。
6、内嵌Unicode、UTF8、ANSI编码互转工具,方便硬编码文字的检索以及相关汉化类修改。
7、内置Log等调试工具,方便应用进程、logcat输出查看等进阶操作,监测修改apk的运行状况,以助于分析和查找错误
8、内置ADB功能,包括使用ADB向设备(或模拟器)安装、卸载、运行修改后的apk,进行测试,并可管理所连接设备的存储文件(包括系统以及用户文件)
9、所有操作步骤、结果都会显示在日志窗口,方便查看。
10、默认支持记事本、计算器等粗谈小工具,开放设置接口可根据本人需要自定义外部工具,满足个性化需求。
先放两张界面图:
注意:如果软件首次运行时提示未找到JAVA SDK,说明未安装JAVA SDK或者未将JAVA SDK设置到WINDOWS系统环境变量中,请自己手动配置。
另外说明:xml, smali, html, jar 等相关文件格式可以直接拖到窗口界面上打开,将装有图片的文件夹拖拽到窗口界面上,可预览图片中的相关格式。
Android killer 正式版 V1.0.0.102更新
本次正式版更新不得不说是给新手一次福利:
本次更新总概览:
1. 增加代码描述提示功能(适合新手)
2. 代码自动补全功能(适合新手)
3. 在项目工程中优化并显示apk图标。
4. 优化类以及方法图标。
5. 编译生成文件名称变化,以及快速打开编译项目所在位置。
6. 增加代码模板插入功能
7. 优化右键菜单,更简洁方便
8. 优化logcat日志显示,查看更方便。
9. 添加16进制/10进制转换功能
一、 增加代码描述提示(适合新手)
将鼠标光标定位在代码上,会提示当前代表所表示的含义,再也不要一次次的查表看代码了,
二、 代码自动补全功能(适合新手)
代码自动补全功能,在输入法在英文状态下。使用shift+空格键即使用,只需输入第一个或者前几个字母即可隐肆提示代码自动补全。
三、 在项目工程中优化并显示apk图标
项目中显示ap图标可以让你在众多项目中找到某个项目
对于首次反编译APK未及时更新工程选项卡图标的原因,是因为正常APK在反编译后才会得到其中的资源,所以在首次反编译时,使用工具默认的安卓小图标代替,反编译成功后,可在“开始”列表中右键刷新列表,更新下工程图标缓存即可。
四、 优化类以及方法图标
图标采用eclispe中图标显示
五、 编译生成文件名称变化,以及快速打开编译项目所在位灶凳轿置
快速找到编译后的文件
方法一:
点选 "工程管理器" 中 Android 小图标按钮或点击下面路径进行查看
方法二:直接点击下面的蓝色字体即可
F. 逆向需要的工具汇总(持续更新中)
一、砸壳工具
mpdecrypted: https://github.com/stefanesser/mpdecrypted
Clutch: https://github.com/KJCracks/Clutch
二、界面分析工具
Reveal: https://revealapp.com/
三、监控山罩如工具
snoop-it: https://code.google.com/archive/p/snoop-it/
introspy: https://github.com/iSECPartners/Introspy-iOS
四、静态分析工具
IDA: https://www.hex-rays.com/procts/ida/support/download_demo.shtml
Hopper: https://www.hopperapp.com/
五、动态调试工具
lldb: http://lldb.llvm.org/
六、动态脚本工具
cycript: http://www.cycript.org/
frida: http://www.frida.re/
七、抓包工具
BurpSuite: https://portswigger.net/burp/download.html
Charles: https://www.charlesproxy.com/
Wireshark: https://www.wireshark.org/download.html
八、Mac工具
MachOView: https://github.com/gdbinit/MachOView
九、导出头文件工具
class-mp: https://github.com/nygard/class-mp
十、THEOS越狱开发工具包
thoes: https://github.com/theos/theos/wiki/Installation
十一、文件管理工具
Filza ios设备查看文件系统
iFunBox/iExplorer mac设备闷耐查看ios设备的文件系统
十二、debugserver (动态调试,附加子进程)
https://www.jianshu.com/p/36dc01a37180
十三、常用Tweak.xm预处理指令
http://iphonedevwiki.net/index.php/Logos
十四、符号表恢复工具(restore-symbol)
https://github.com/tobefuturer/restore-symbol
其他工具:
iOSOpenDev: https://code.google.com/archive/p/iosopendev/downloads
insert_dylib: https://github.com/Tyilo/insert_dylib
iTerm: http://www.iterm2.com/
Alfred: https://www.alfredapp.com/
iTools: http://www.itools.cn/
更新:2018-8-16
phantomjs :提供一个浏览器环境的命令行逗启接口,相当于"虚拟浏览器"。
PhantomJS官方地址: http://phantomjs.org/ 。
PhantomJS官方API: http://phantomjs.org/api/ 。
PhantomJS官方示例: http://phantomjs.org/examples/ 。
PhantomJS GitHub: https://github.com/ariya/phantomjs/ 。
参考文档: http://javascript.ruanyifeng.com/tool/phantomjs.html#toc1
MonkeyDev : https://github.com/AloneMonkey/MonkeyDev
这里我就直接功能点了:
原有iOSOpenDev的升级,非越狱插件开发集成神器!
frida-ios-mp :一键砸壳工具,非常的好用。
https://github.com/AloneMonkey/frida-ios-mp
Hookzz :通过Hookzz可以快速找到调用的方法,理清程序调用逻辑。
源码: https://github.com/jmpews/HookZz
文档: https://jmpews.github.io/zzpp/getting-started/
G. 有没有反编译工具,可以把APK完全反成一个android项目的 , 这个android逆向助手只
我可以让你看见项目的源码,但是不知道怎么才能将源码放到eclipse中进行运行!~~我试了好多次,都不成功,导入工程后总是会出错,不知道是我哪里设置的和源码中设置的不一样!~~
方法是:第一步:你先把下载的包的后缀名改成.zip
第二步:到网上搜索dex2jar,下载一个,解压到电脑磁盘中
第三步:打开你改完后缀名的.zip文件,将其中的.dex文件解压出来,拷贝到dex2jar这个文件中,和lib文件夹放在同文件下
第四步:进入cmd命令,然后用cd 命令进入到dex2jar这个文件中,我的是这样的cd C:\android反编译工具\dex2jar-0.0.9.15\dex2jar-0.0.9.15,然后在执行dex2jar classes.dex这个命令,等待一会,反编译好了后
第五步:到网上搜索jd_gui,然后下载一个解压到磁盘,打开它然后点打开文件,找到刚刚反编译好的那个文件夹,即dex2jar那个文件夹中找.jar文件,打开它就能看到源码了!~~~
其它的资源文件什么的就在刚刚你改完的那个zip文件中有。
不过你也可以将.apk文件再反编译回来,在看资源和Androidmanifest.xml文件!~~~这个用到apktool,这个用起来挺简单的,你可以到网上搜索一下!~~~
H. Android逆向之http/https网络抓包
用于android app的http/https网络抓包的主要有以下三个工具
由于这个知识点网上的资料比较多,我就不重复迅圆塌造车了,charles和burpsuite在linux下用,windows下推荐亩圆使用fiddler,功能比较强大,写的比较好的文章:
fiddler Android下https抓包全腔迅攻略
另外的方法可见:
http://blog.dornea.nu/2015/02/20/android-remote-sniffing-using-tcpmp-nc-and-wireshark/
I. 如何系统的学习安卓逆向分析
首先,逆向分析是一门技术,也是一门艺术。
其次,安卓逆向同样可细分为应用层APK逆向、安卓设备框架、内核驱动等逆向、基于安卓的硬件产品逆向等。此处假定楼主说的是第一种逆向。
应用层的逆向分析根据需求的不同,又可细分成APK流程逆向与功能逆向。
流程逆向通常是指简单的对APK运行流程进行分析,此类分析通常可以使用将APK置于沙盒环境中运行捕捉并查看运行结果。这种逆向需求通常不是很多,典型的工种有杀软厂商的病毒分析工程师。
功能逆向相比流程逆向则困难得多。但需求比较普遍。实际逆向分析过程中对功能实现的理解,在很大程度上取决于逆向人员相关的软件开发知识。比如,分析Android程序的JAVA代码就需要掌握基本的Android软件开发的知识。分析so库的代码就需要了解C/C++相关的so库开发的知识。除了基本开发相关的能力外,逆向分析人员还需要具备以下知识:
ARM/X86/MIPS汇编语言-分析so库时可能需要阅读大量的反汇编代码。
常见逆向分析工具的使用-JDGUI/IDA PRO/APKTOOL/JEB/DEX2JAR
常用的安卓程序调试与反调试手段-调试器检测与反检测/脱壳/反混淆
常用的加密与解密算法-好的逆向分析人员需要有快速识别常见加密解密算法的能力
最后,就是多动手,多动手练习是掌握逆向分析技术最好的方法。