首页
社区
课程
招聘
[原创]Android_Crackmes03_by_deurus破解小记
发表于: 2016-8-24 13:50 7171

[原创]Android_Crackmes03_by_deurus破解小记

2016-8-24 13:50
7171

题记:破解这个Crackme是为了学习Android平台下的软件逆向技术,我是新手,所以就挑了个简单的进行分析。

先看看软件作者的要求:
Rules for the Crackme03 (Android) by deurus
===========================================
- Valid solutions are:
  - Make keygen + tuto and send to crackmes.de

Things to consider:
- Because this crackme need some info of phone, not run in emulator.
- Tested on HTC Magic with Android 2.2 but should be run in another android version.
主要是说,1> 写出keygen;2> 因为需要读取电话的某些信息,因而不能运行于模拟器中。但实际上只是不能运行于Google官方出的模拟器,而可以自定义硬件信息的模拟器是可以正常运行的,比如我们这次使用的天天模拟器。

特别说明:
因为是新手,所以大家如果发现文中有错误的地方,还望批评指正。

一、用到的工具
1. ApkIDE v3.3.3;
2. JEB v2.2.5;
3. 天天模拟器 v1.4.1047;
4. Android Studio v1.5 + DDMS + adb等;

二、静态分析
这里我们先通过静态分析来了解程序需要重点分析的地方在哪里,有没有可能只通过静态分析就可以得到有效的注册信息,以及是否存在爆破点等。

1. 用WinRAR打开该apk文件,发现里面没有lib文件夹,说明没有动态连接库文件需要分析,也说明程序的核心都在classes.dex文件里。

2. 分析过程
1> 在模拟器上安装并运行该Crackme,什么都不输入,直接点击Check按钮,提示“Min 4 chars”,如下图所示:


2> 根据上一步的提示,用ApkIDE打开Crackme03.apk文件,等待分析完毕后搜索"Min 4 chars",并在搜索结果里双击“const-string v23, " Min 4 chars"”,ApkIDE自动定位到HelloAndroid$2.smali文件中合适的位置,如下图所示:


3> 为了使反编译取得更佳的效果,我们使用JEB来反编译该apk,并根据“Min 4 chars”字符串定位到onClick函数,如下图:

对于上图中的
String v10 = HelloAndroid.this.findViewById(2131034116).getText().toString();

String v15 = HelloAndroid.this.findViewById(2131034118).getText().toString();
我们把数字2131034116转换为16进制后得到0x7F050004,把数字2131034118转换为16进制后得到0x7F050006。在资源文件的values/public.xml中,我们发现了如下信息:

<public id="0x7f050004" name="txt_name" type="id" />
......
<public id="0x7f050006" name="txt_serial" type="id" />
if(String.valueOf(tmp) + "-" + String.valueOf(((long)(Integer.parseInt(imeiSix) ^ Integer.parseInt(iccid.substring(0, 6))))) + "-" + imeiSix.equals(serial)) {
    Toast.makeText(HelloAndroid.this.getApplicationContext(), "God boy", 1).show();
}
else {
    Toast.makeText(HelloAndroid.this.getApplicationContext(), "Bad boy ", 1).show();
}
.local v14, "serial":Ljava/lang/String;
invoke-virtual {v14, v15}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

move-result v22

if-eqz v22, :cond_2
const-string v2, "=====v14====="

invoke-static {v2, v14}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I

const-string v2, "=====v15====="

invoke-static {v2, v15}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (3)
雪    币: 8221
活跃值: (4181)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
精品支持下,据说IDA也可以调试android,不知效果怎样?也曾试着用过,不过没用太明白!
2016-8-24 21:40
0
雪    币: 2
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
对我这样的小白简直太有用了,谢谢楼主的分享
2017-2-16 11:55
0
雪    币: 144
活跃值: (30)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5

你好楼主,我是一名初学者,安照您的流程进行调试,但遇到一些问题,向您请教一下: 

我使用的相关软件都和您一样 

第一个问题: 

执行这一步 

在运行程序前,我们在电脑上打开控制台,并输入adb connect 127.0.0.1:6555,然后运行DDMS,接着在模拟器中运行Crackme程序。 输入name为phrank,serial为112233后,点击Check按钮得到提示“Bad boy”,切换到DDMS查看输出的信息,能够发现有类似下面的两行信息: 

 我的DDMS能显示进程名、ID等信息,但输出框显示: Adb connection Error:An existing connection was forcibly closed by the remote host 也看不到输出的系列号 

 第二个问题: C:\ttmnq\Tools>adb forward tcp:8700 jdwp:9448 

adb server is out of date.  

killing... * 

daemon started successfully * 

error: device not found 

总是显示error: device not found 

Android Studio显示: Unable to open debugger port (localhost:8700)

2017-3-2 15:51
0
游客
登录 | 注册 方可回帖
返回
//