Android逆向实例笔记—破解第一个Android程序_crackme02

本实例来源于《Android软件安全与逆向分析》这本书,作者是看雪的非虫,感谢提供这么好的书和实例。

一、工具
干什么都得一个好工具对吧。
1.apkIDE
反编译呢,我这里使用的是apkIDE(apk改之理),工具的话自己百度吧。个人不喜欢留一些不需要的东西在网盘里,难得整理,百度一大堆。我这里就给一个官网吧,免得有些童鞋找错了地方。现在这下下载网站一不小心,什么全家福都来了。好了,扯得有点远了。我用的就是最新版,我个人就喜欢最新版。(最新版可能有些问题)
http://www.popotu.com/popo/apkide.html
上个样图:
Android逆向实例笔记—破解第一个Android程序_crackme02_第1张图片
2.蓝叠
只要是模拟器都可以,我个人觉得这个好用。随便找一个都行。官网:http://www.bluestacks.cn/
样图:Android逆向实例笔记—破解第一个Android程序_crackme02_第2张图片

二、查看源程序
这里我们直接拖拽crackme02到蓝叠中,安装
Android逆向实例笔记—破解第一个Android程序_crackme02_第3张图片



然后我们点开看看效果。



Android逆向实例笔记—破解第一个Android程序_crackme02_第4张图片


我们可以看到左上角有个程序未注册。我们随便输入字符,点击注册。发现Toast提示我们,无效用户名或注册码。
此时,我们就该上我们的工具了

三、反编译

1.工具的使用
这里详细介绍一下apkIDE的使用。
打开apkIDE
Android逆向实例笔记—破解第一个Android程序_crackme02_第5张图片

点击项目,然后点击打开apk,选择我们的crackme02。

看输出框的进度,之后就可以进行我们的操作了。

Android逆向实例笔记—破解第一个Android程序_crackme02_第6张图片

反编译之后的文件目录

Android逆向实例笔记—破解第一个Android程序_crackme02_第7张图片

其中smali中存放的是反汇编的代码。
res是所有的资源文件。
都与开发目录一致。

2.strings.xml

我们知道在开始的时候,我们一般会一些字符放到strings.xml文件中去。这里我就打开strings.xml文件。
文件在:res-values-strings.xml

Android逆向实例笔记—破解第一个Android程序_crackme02_第8张图片

现在我们看看strings.xml中的内容


    Crackme0201
    Hello world!
    Settings
    crackme02
    Android程序破解演示实例
    用户名:
    注册码:
    注 册
    请输入用户名
    请输入16位的注册码
    程序未注册
    程序已注册
    无效用户名或注册码
    恭喜您!注册成功

我们可以很容易的看到,Toast提示我们错误的地方

Android逆向实例笔记—破解第一个Android程序_crackme02_第9张图片

3.public.xml
我们知道每个字符都有唯一的int类型的索引值。
于是我们打开strings.xml上面的public.xml文件。


    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

找到我们需要的unsuccessed。如果觉得很难找,那么我们搜索功能就来了。

在搜索内容里面写上unsuccessed,然后搜索范围选择选中的文件或文件夹,左边我们选择public.xml。然后点击搜索全部。
Android逆向实例笔记—破解第一个Android程序_crackme02_第10张图片


我们可以看到下面的搜索结果显示了出来,我们双击这一行,就会跳到我们所需要找的位置。

Android逆向实例笔记—破解第一个Android程序_crackme02_第11张图片

然后我们记住id:0x7f05000c。
3.smali
这个时候我们还得使用我们的搜索。方法类似,不在赘述。我们要选择搜索smail
Android逆向实例笔记—破解第一个Android程序_crackme02_第12张图片


我们发现有两处。
第一处const v1, 0x7f05000c   
于是我们双击过去。
然后往上找跳转的地方。
    move-result v0
    if-nez v0, :cond_0

这里第一行代码返回的结果存到v0中去,第二行是对v0进行判断。如果值为0,就往下运行,也就是弹出未注册的地方。如果不为0,就跳转到cond_0处。

Android逆向实例笔记—破解第一个Android程序_crackme02_第13张图片

那么也就是这里如果跳转成功就会跳转,那么程序就是成功。

四、修改smali
这里是nez,不等于0,那我们就修改为eqz,等于0。

Android逆向实例笔记—破解第一个Android程序_crackme02_第14张图片

重点中的重点,修改完之后,一定记得保存。不然可能编译错误或者,没有编译修改后的代码。

然后我们点击编译,编译生成apk

Android逆向实例笔记—破解第一个Android程序_crackme02_第15张图片

看输出框的进度和文件路径,我们就去查找我们的apk。一般来说就在原apk旁边。重新编译签名后的apk名字前面会加上ApkIDE_


Android逆向实例笔记—破解第一个Android程序_crackme02_第16张图片

五、验证
重新编译好的apk我们需要来验证一下是否成功。
我们拖拽到蓝叠中,安装打开。

Android逆向实例笔记—破解第一个Android程序_crackme02_第17张图片
这里发现我们已经破解成功了。

最后给出apk的下载吧。
https://yunpan.cn/cMuPerPjatc6S  访问密码 24ce
说的有错误或者不对的地方欢迎指正讨论。

你可能感兴趣的:(Android逆向实例)