AliCrackme_2题的分析

作者:Fly2015

AliCrackme_2.apk运行起来的注册界面,如图。

首先使用Android反编译利器Jeb对AliCrackme_2.apk的Java层代码进行分析。

很幸运,就找到了该apk程序的用户注册码的函数securityCheck并且这个函数是在Native层实现的。下面就到该程序的so库中去查找该函数的Native实现。

Native层securityCheck函数的注册并不是使用在JNI_OnLoad函数中进行注册的方式注册的,因此非常走运的找到securityCheck函数的实现,分析如下图:

通过对Native代码的静态的分析发现, _lpSaveBuffer = off_628C中保存的就是正确的注册码字符串,因此,要获取该apk的注册码,必须对其进行动态的调试,获取到_lpSaveBuffer 中保存的字符串的内容就能实现该apk的破解。

对该Android应用程序进行动态的调试。说一句,Android应用程序一般会在JNI_OnLoad函数中进行程序的反调试操作,以防止别人对其App进行动态调试。经过几轮动态调试的实验,发现该Android应用程序会调用函数pthread_create创建线程进行反调试。因此,直接在函数Java_com_yaotong_crackme_MainActivity_securityCheck处下断点实现破解的方法不能直接达到。

因此,为了阻止该App程序的反调试,将程序的代码进行了修改。如图,定位地址A8CE 9C58处的ARM汇编指令BLX R7在内存中的位置,然后将汇编指令BLX R7改为汇编指令MOV R0, RO即NOP掉BLX R7指令。

至于ARM汇编指令与机器码的转换,使用下面这个工具,但是请注意,在使用这个工具的时候,必须将这个工具放在桌面上才能正常的使用。

顺利跨过反调试的障碍,下面就在函数Java_com_yaotong_crackme_MainActivity_securityCheck上下断点,直奔主题。

在程序输入密码的界面上,随便输入一个字符串密码,函数Java_com_yaotong_crackme_MainActivity_securityCheck就会被调用。

程序就会断在函数Java_com_yaotong_crackme_MainActivity_securityCheck上,然后在该函数里找到_lpSaveBuffer = off_628C对应的汇编代码LDR R2, [R1, R7]。在汇编代码LDR R2, [R1, R7]的下一条指令上下断点即可得到R2保存的密码字符串指针的地址为A8CEC450,然后在程序数据内存中同步R2的值定位到地址A8CEC450处的字符串aiyou,bucuoo,很显然aiyou,bucuoo就是要获取的密码。

AliCrackme_2题的分析文档和apk下载地址:http://download.csdn.net/detail/qq1084283172/8897059

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-06 07:39:56

AliCrackme_2题的分析的相关文章

RE写作Issue问题题库分析与提纲

RE写作Issue问题题库分析与提纲 GRE写作Issue问题题库分析与提纲 第一类 社会 2. "Competition is ultimately more beneficial than detrimental to society." 归根结底,竞争对于社会是利多弊少. Generally speaking, competition contributes to progress in society. 1.        Generally speaking, competi

2013下半年软件评測师真题考试分析-2

真题65:測试过程中.正确的測试顺序应该是() (1)单元測试  (2)集成測试  (3)系统測试 A.(1)(2)(3) B.(3)(1)(2) C.(2)(3)(1) D.(3)(2)(1) 分析解答:測试过程应该是针对单个模块的单元測试開始,然后逐步集成到各个单元.最后进行系统測试,所以本题的答案选择A. 真题66:下面属于静态測试方法的是() A.分支覆盖率測试 B.复杂度分析 C.系统压力測试 D.路径覆盖分析 分析解答:本题考查软件静态測试方法.静态測试不实际执行被測试软件,主要是对

软件评測师真题考试分析-6

2010年下半年试真题36: 软件測试原则中指出"全然測试是不可能的".主要原因是(). A.输入量太大.输出结果太多以及路径组合太多 B.自己主动化測试技术不够完好 C.測试的时间和人员有限 D.只靠黑盒測试不能达到全然測试 分析解答:全然測试是不可能的,由于不可能穷举软件的全部測试路径.输入有输出,所以本题的正确答案A. 2010年下半年试真题38: 下面关于设计功能測试用例的叙述.()是不对的. A.尽量用80%的測试用例覆盖20%的核心业务模块 B.功能測试用例中不包含功能的依

2013下半年软件评測师真题考试分析-3

真题51:某软件系统无需在线容错,也不能採用冗余设计,假设对可靠性要求较高.故障有可能导致严重后果,一般採用(). A.恢复块设计 B.N版本号程序设计 C.检错技术 D.减少复杂度设计 分析解答:本题考查软件的可靠性设计. 本题目中的故障可能导致严重后果,所以应採取检測技术预防故障的产生,本题的正确答案选择C. 真题52:软件可靠性管理把软件可靠性活动贯穿于软件开发的全过程.成为软件project管理的一部分.确定软件可靠性度量活动属于()阶段. A.需求分析 B.概要设计 C.具体设计 D.

Project Euler 第一题效率分析

Project Euler: 欧拉计划是一系列挑战数学或者计算机编程问题,解决这些问题需要的不仅仅是数学功底. 启动这一项目的目的在于,为乐于探索的人提供一个钻研其他领域并且学习新知识的平台,将这一平台打造一个有趣和休闲 的环境. 项目主页:https://projecteuler.net 第一题 Multiples of 3 and 5 If we list all the natural numbers below 10 that are multiples of 3 or 5, we ge

软件评测师真题考试分析-6

2010年下半年试真题36: 软件测试原则中指出"完全测试是不可能的",主要原因是(). A.输入量太大,输出结果太多以及路径组合太多 B.自动化测试技术不够完善 C.测试的时间和人员有限 D.仅仅靠黑盒测试不能达到完全测试 分析解答:完全测试是不可能的,因为不可能穷举软件的所有测试路径.输入有输出,所以本题的正确答案A. 2010年下半年试真题38: 以下关于设计功能测试用例的叙述,()是不正确的. A.尽量用80%的测试用例覆盖20%的核心业务模块 B.功能测试用例中不包括功能的依

2013下半年软件评测师真题考试分析-1

真题60:以下关于边界值测试的叙述中,不正确的是()A.边界值分析法不仅重视输入域边界,而且也必须考虑输出域边界B.边界值分析法是对等价类划分法的补充C.发生在输入输出边界上的错误比发生在输入输出范围的内部错误要少D.测试数据应尽可能选取边界上的值,而不是等价类中的典型值或任意值 分析解答:本题考查黑盒测试中的边界值测试法,发生在输入输出边界上的错误比发生在输入输出范围的内部错误要多,所以本题的正确答案选择C. 真题61:白盒测试不能发现()A.代码路径中的错误B.死循环C.逻辑测试D.功能错误

2013下半年软件评测师真题考试分析-2

真题65:测试过程中,正确的测试顺序应该是()(1)单元测试  (2)集成测试  (3)系统测试A.(1)(2)(3)B.(3)(1)(2)C.(2)(3)(1)D.(3)(2)(1) 分析解答:测试过程应该是针对单个模块的单元测试开始,然后逐步集成到各个单元,最后进行系统测试,所以本题的答案选择A. 真题66:以下属于静态测试方法的是()A.分支覆盖率测试B.复杂度分析C.系统压力测试D.路径覆盖分析分析解答:本题考查软件静态测试方法.静态测试不实际运行被测试软件,主要是对软件的编程格式.结构

2013下半年软件评测师真题考试分析-4

真题56:以下关于软件测试时机的叙述中,不正确的是().A.应该尽可能早地进行测试B.软件中的错误暴露的越迟,则修复和改正错误所花费的代价就越高.C.应该在代码编写完成后开始测试D.项目需求分析和设计阶段需要测试人员参与 分析解答:本题考查软件测试的一些基础知识,测试活动贯穿于整个开发生命周期,所以本题的答案选择C. 真题57:以下不属于软件测试工具的是().A.JmeterB.LoadrunnerC.JtestD.Jbuilder 分析解答:Jbuilder是一种软件开发工具,所以本题的正确答