Android逆向笔记(2)--- 破解第一个程序
2016-02-26 19:43
323 查看
1、将apk文件利用ApkTool反编译,生成Smali格式的反汇编代码,然后阅读Smali文件的代码来理解程序的运行机制,找到程序的突破口进行修改,最后使用ApkTool重新编译成apk文件并签名,最后运行测试,如此循环,直至程序破解成功。2、由于由界面提示,我们可以在资源(res\values\strings.xml)中找到对应的字符串.
在crackme02目录下生成的dist目录中,存放着编译成功的apk的文件。7、使用signapk.jar对生成的apk文件进行签名在上述中生成的apk文件,还没有签名,不能够安装测试,使用signapk.jar对生成的apk文件进行签名。signapk.jar是Android源码包中的一个签名工具。代码位于Android源码目录下的build\tools\signapk\SignApk.java文件中,源码编译后可以在/out/host/linux-0x86/framework目录中找到它。在进行签名的时候还需要使用签名文件:testkey.pk8和testkey.x509.pem两个文件,在Android源码的build\target\product\security目录中可以找到我们创建signapk.bat方便调用,在signapk.bat中内容如下:
<?xmlversion="1.0"encoding="utf-8"?>
<resources>......
<stringname="registered">程序已注册</string>
<stringname="unsuccessed">无效用户名或注册码</string>
<stringname="successed">恭喜您!注册成功</string>
</resources>3、我们知道所有的String.xml文件中的内容,在开发的时候都在R.java文件中有唯一的int类型的对应标识,使用ApkTool编译Apk后,所有的索引值保存在同String.xml文件同目录下的public.xml文件中
<?xmlversion="1.0"encoding="utf-8"?>
<resources>
......
<publictype="string"name="registered"id="0x7f05000a"/>
<publictype="string"name="unsuccessed"id="0x7f05000b"/>
<publictype="string"name="successed"id="0x7f05000c"/>
......</resources>[/code]4、我们在Smali中搜索内容含有0x7f05000b的文件
.line32
#invokes:Lcom/droider/crackme0201/MainActivity;->checkSN(Ljava/lang/String;Ljava/lang/String;)Z
invoke-static{v0,v1,v2},Lcom/droider/crackme0201/MainActivity;->access$2(Lcom/droider/crackme0201/MainActivity;Ljava/lang/String;Ljava/lang/String;)Z
move-resultv0
.line33
if-nezv0,:cond_0#如果v0不等于0则跳到标号cond_0处
.line34
iget-objectv0,p0,Lcom/droider/crackme0201/MainActivity$1;->this$0:Lcom/droider/crackme0201/MainActivity;
.line35
constv1,0x7f05000b#unsuccessed字符串
.line34
invoke-static{v0,v1,v3},Landroid/widget/Toast;->makeText(Landroid/content/Context;II)Landroid/widget/Toast;
....
:cond_0iget-objectv0,p0,Lcom/droider/crackme0201/MainActivity$1;->this$0:Lcom/droider/crackme0201/MainActivity
.line38
constv1,0x7f05000c
....5、将if-nezv0,:cond_0修改为if-eqzv0,:cond_0并保存
......
.line33
#if-nezv0,:cond_0
if-eqzv0,:cond_0
......6、使用apktool重新编译
apktool.batbcrackme02 |
@echooff
java-jar"%~dp0\signapk.jar""%~dp0\testkey.x509.pem""%~dp0\testkey.pk8"%1signapk.apk使用的时候,如下调用即会在文件的同目录下生成signapk.apk文件
signapkcrackme02.apk8、安装测试adbinstallsignapk.apk备注:直接调用已存在的模型器命令•输入androidlistavd//查看当前电脑上的存在的模拟器•输入emulator-avdexample//启动名称为example的模拟器
相关文章推荐
- android工程中资源模块划分
- 【Android】启动时跳过欢迎界面的时机
- 【Android】进入应用和切换界面时闪屏的问题
- 【Android】使用技巧 —— 快速进入某一界面
- Android ROM开发(三)——精简官方ROM并且内置ROOT权限,开启Romer之路
- GridView常用属性
- Android:ScrollView和SwipeRefreshLayout高度测量
- Android APK如何签名
- Android Screen Monitor同步手机屏幕到PC
- Android自定义带下划线的TextView
- [Android]开源中国源码分析之一---启动界面
- Android源码 模块编译
- VLC-Android Intro - MODULE LIST
- Android中数据库的操作流程详解
- Android,水波进度条
- Xamarin.Android真机调试时闪退解决办法
- Aandroid 事件分发机制(二):ViewGroup
- Android启动过程分析——init.c(二)
- Android高手进阶:Adapter深入理解与优化
- Android 同一个数据适配器(Adapter)支持不同布局。