吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13032|回复: 33
收起左侧

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

  [复制链接]
牵走天涯 发表于 2016-8-24 21:04
本帖最后由 牵走天涯 于 2016-8-25 12:31 编辑

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




本人菜鸟一枚,初始Android逆向,这里写的很详细的过程以及apkIDE的使用。很适合入门的童鞋看看参考下。大神就路过吧。最后还要感谢吾爱提供这么好的学习平台。



一、工具
干什么都得一个好工具对吧。
1.apkIDE
反编译呢,我这里使用的是apkIDE(apk改之理),工具的话自己百度吧。个人不喜欢留一些不需要的东西在网盘里,难得整理,百度一大堆。我这里就给一个官网吧,免得有些童鞋找错了地方。现在这下下载网站一不小心,什么全家福都来了。好了,扯得有点远了。我用的就是最新版,我个人就喜欢最新版。(最新版可能有些问题)
http://www.popotu.com/popo/apkide.html

上个样图:


2.蓝叠
只要是模拟器都可以,我个人觉得这个好用。随便找一个都行。官网:http://www.bluestacks.cn/
样图:


二、查看源程序
这里我们直接拖拽crackme02到蓝叠中,安装







然后我们点开看看效果。












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


三、反编译

1.工具的使用
这里详细介绍一下apkIDE的使用。
打开apkIDE



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

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




反编译之后的文件目录




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

2.strings.xml


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






现在我们看看strings.xml中的内容
[HTML] 纯文本查看 复制代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Crackme0201</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">crackme02</string>
    <string name="info">Android程序破解演示实例</string>
    <string name="username">用户名:</string>
    <string name="sn">注册码:</string>
    <string name="register">注 册</string>
    <string name="hint_username">请输入用户名</string>
    <string name="hint_sn">请输入16位的注册码</string>
    <string name="unregister">程序未注册</string>
    <string name="registered">程序已注册</string>
    <string name="unsuccessed">无效用户名或注册码</string>
    <string name="successed">恭喜您!注册成功</string>
</resources>
我们可以很容易的看到,Toast提示我们错误的地方





3.public.xml
我们知道每个字符都有唯一的int类型的索引值。
于是我们打开strings.xml上面的public.xml文件。
[HTML] 纯文本查看 复制代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <public type="drawable" name="ic_launcher" id="0x7f020001" />
    <public type="drawable" name="ic_action_search" id="0x7f020000" />
    <public type="layout" name="activity_main" id="0x7f030000" />
    <public type="dimen" name="padding_small" id="0x7f040000" />
    <public type="dimen" name="padding_medium" id="0x7f040001" />
    <public type="dimen" name="padding_large" id="0x7f040002" />
    <public type="string" name="app_name" id="0x7f050000" />
    <public type="string" name="hello_world" id="0x7f050001" />
    <public type="string" name="menu_settings" id="0x7f050002" />
    <public type="string" name="title_activity_main" id="0x7f050003" />
    <public type="string" name="info" id="0x7f050004" />
    <public type="string" name="username" id="0x7f050005" />
    <public type="string" name="sn" id="0x7f050006" />
    <public type="string" name="register" id="0x7f050007" />
    <public type="string" name="hint_username" id="0x7f050008" />
    <public type="string" name="hint_sn" id="0x7f050009" />
    <public type="string" name="unregister" id="0x7f05000a" />
    <public type="string" name="registered" id="0x7f05000b" />
    <public type="string" name="unsuccessed" id="0x7f05000c" />
    <public type="string" name="successed" id="0x7f05000d" />
    <public type="style" name="AppTheme" id="0x7f060000" />
    <public type="menu" name="activity_main" id="0x7f070000" />
    <public type="id" name="textView1" id="0x7f080000" />
    <public type="id" name="edit_username" id="0x7f080001" />
    <public type="id" name="edit_sn" id="0x7f080002" />
    <public type="id" name="button_register" id="0x7f080003" />
    <public type="id" name="menu_settings" id="0x7f080004" />
</resources>

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


在搜索内容里面写上unsuccessed,然后搜索范围选择选中的文件或文件夹,左边我们选择public.xml。然后点击搜索全部。





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




然后我们记住id:0x7f05000c。
3.smali
这个时候我们还得使用我们的搜索。方法类似,不在赘述。我们要选择搜索smail






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


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






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

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





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

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




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








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



这里发现我们已经破解成功了。

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




最后开心的给点热点和CB吧。(帖子反反复复改了三四次,只为了大家好看点,大家就多给点热心吧


好吧,做事有始有终。虽然没有什么技术含量。我还是把它修改好了,图片重新加上了。



免费评分

参与人数 13吾爱币 +2 热心值 +13 收起 理由
meitounao + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
卖梦人 + 1 + 1 谢谢@Thanks!
lc980616708 + 1 真心感谢楼主,教程详细 适合小白使用,收下我的膝盖
NSP + 1 就改了3 个字母 epz
xyt + 1 我很赞同!
ysqb147258 + 1 我很赞同!
xiaoxi2011 + 1 用心讨论,共获提升!
wzhl8760720 + 1 我很赞同!
610100 + 1 谢谢@Thanks!
qtfreet00 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
liuman02 + 1 谢谢@Thanks!
爱的漩涡 + 1 谢谢@Thanks!
猫子1992 + 1 想问一下 需要什么基础

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 牵走天涯 发表于 2016-8-24 21:13
我发现,下面的图片加载不出来。仔细想了想。原来是前面的图片我是保存本地再上传的,后面我发现了直接截图粘贴就可以了,然后就偷懒了。结果就gg,不知道什么吾爱这样显示不出来,现在补图貌似有些麻烦。初学的同学就移步一下我的博客吧。这次实在不好意思了,对不起各位看官了,下次我一定注意,不敢偷懒了!
虚设经年 发表于 2016-8-28 19:08 来自手机
牵走天涯 发表于 2016-8-27 20:13
我也还没学脱壳的,反正我学一点,发一点嘛

啊哈哈希望看到你的教程,感觉写的很简单( ˙˙ )
 楼主| 牵走天涯 发表于 2016-8-24 21:05
一楼我自己的。
CSDN我的博客。
http://blog.csdn.net/qq_24349189
 楼主| 牵走天涯 发表于 2016-8-25 10:13
这简直太让人伤心了。居然一个回复都没有
 楼主| 牵走天涯 发表于 2016-8-25 12:13
@猫子1992  基础的话,首先是java,然后看看Android开发。
爱的漩涡 发表于 2016-8-25 12:27
没有点编程基础,找关键跳真不容易
 楼主| 牵走天涯 发表于 2016-8-25 12:30
爱的漩涡 发表于 2016-8-25 12:27
没有点编程基础,找关键跳真不容易

那就的多学学java
爱的漩涡 发表于 2016-8-25 12:35

谢谢你的建议
楚燕离 发表于 2016-8-25 14:05
跟着楼主一起学习~~
liuman02 发表于 2016-8-25 15:06
i不错,感谢分享。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 14:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表