您的位置:首页 > 移动开发 > Android开发

Android逆向笔记(2)--- 破解第一个程序

2016-02-26 19:43 323 查看
1、将apk文件利用ApkTool反编译,生成Smali格式的反汇编代码,然后阅读Smali文件的代码来理解程序的运行机制,找到程序的突破口进行修改,最后使用ApkTool重新编译成apk文件并签名,最后运行测试,如此循环,直至程序破解成功。2、由于由界面提示,我们可以在资源(res\values\strings.xml)中找到对应的字符串.
<?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_0
iget-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
在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中内容如下:
@echooff
java-jar"%~dp0\signapk.jar""%~dp0\testkey.x509.pem""%~dp0\testkey.pk8"%1signapk.apk
使用的时候,如下调用即会在文件的同目录下生成signapk.apk文件
signapkcrackme02.apk
8、安装测试adbinstallsignapk.apk备注:直接调用已存在的模型器命令•输入androidlistavd//查看当前电脑上的存在的模拟器•输入emulator-avdexample//启动名称为example的模拟器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: