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
AliCrackme_2题的分析的更多相关文章
- Python小白的数学建模课-A1.国赛赛题类型分析
分析赛题类型,才能有的放矢. 评论区留下邮箱地址,送你国奖论文分析 『Python小白的数学建模课 @ Youcans』 带你从数模小白成为国赛达人. 1. 数模竞赛国赛 A题类型分析 年份 题目 要 ...
- Project Euler 第一题效率分析
Project Euler: 欧拉计划是一系列挑战数学或者计算机编程问题,解决这些问题需要的不仅仅是数学功底. 启动这一项目的目的在于,为乐于探索的人提供一个钻研其他领域并且学习新知识的平台,将这一平 ...
- Leetcode第1题至第10题 思路分析及C++实现
笔者按照目录刷题,对于每一道题,力争使用效率最高(时间复杂度最低)的算法,并全部通过C++代码实现AC.(文中计算的复杂度都是最坏情况复杂度) 因为考虑到大部分读者已经在Leetcode浏览过题目了, ...
- leetcode Online Judge 150题 解答分析之一 Reverse Words in a String
问题 Given an input string, reverse the string word by word. For example, Given s = "the sky is b ...
- 【编程题与分析题】Javascript 之继承的多种实现方式和优缺点总结
[!NOTE] 能熟练掌握每种继承方式的手写实现,并知道该继承实现方式的优缺点. 原型链继承 function Parent() { this.name = 'zhangsan'; this.chil ...
- C++ 每日一题 参数分析 (vector)
首先给出原题地址: https://www.nowcoder.com/practice/668603dc307e4ef4bb07bcd0615ea677?tpId 以下是代码解析: #include& ...
- 模拟电磁曲射炮_H题 方案分析【2019年电赛】【刘新宇qq522414928】
请查看我的有道云笔记: 文档:电磁曲射炮分析.note链接:http://note.youdao.com/noteshare?id=26f6b6febc04a8983d5efce925e92e21
- OCP考试最新052题库分析整理-28
28.Which two are true about external tables? A. They support the ORACLE_DATAPUMP access driver. B. T ...
- 2014年百度之星程序设计大赛 - 资格赛 第二题 Disk Schedule
双调欧几里得旅行商问题是一个经典动态规划问题.<算法导论(第二版)>思考题15-1和北京大学OJ2677都出现了这个题目. 旅行商问题描写叙述:平面上n个点,确定一条连接各点的最短闭合旅程 ...
随机推荐
- msfconsole 常用命令记录
Metasploit是一款开源的渗透测试框架,它现在还在逐步发展中,下面介绍的一些功能和命令,可能会在未来失效. Metasploit框架提供了多种不同方式的使用接口: msfgui msfconso ...
- 【Java进阶面试系列之一】哥们,你们的系统架构中为什么要引入消息中间件?
转: [Java进阶面试系列之一]哥们,你们的系统架构中为什么要引入消息中间件? **这篇文章开始,我们把消息中间件这块高频的面试题给大家说一下,也会涵盖一些MQ中间件常见的技术问题. 这里大家可以关 ...
- 剑指 Offer 25. 合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表 Offer 25 该问题的原型就是多项式的合并. 实现较简单,没有特殊需要注意的问题. package com.walegarrett.offer; /* ...
- 简单的ssm练手联手项目
简单的ssm练手联手项目 这是一个简单的ssm整合项目 实现了汽车的品牌,价格,车型的添加 ,修改,删除,所有数据从数据库中拿取 使用到了jsp+mysql+Mybatis+spring+spring ...
- 2020年HTML5考试模拟题整理(二)
1.以下是HTML5新增的标签是: AA.<aside>B.<isindex> C. <samp>D.<s>2.以下不是HTML5的新增的标签是: BA ...
- Java 树结构的基础部分(一)
二叉树 1.1 为什么需要树这种数据结构 1) 数组存储方式的分析 优点:通过下标方式访问元素,速度快.对于有序数组,还可使用二分查找提高检索速度. 缺点:如果要检索具体某个值,或者插入值(按一定顺序 ...
- 卷积神经网络学习笔记——轻量化网络MobileNet系列(V1,V2,V3)
完整代码及其数据,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 这里结合网络的资料和Mo ...
- LookupError: 'hex' is not a text encoding; use codecs.decode() to handle arbitrary codecs
问题代码: b=b'\x01\x02\x03' x=binascii.b2a_hex(b.decode('hex')[::-1].encode('hex')) python2下是不报错的,因为pyth ...
- Qt添加注释模板
背景 软件:Qt Creator 在写代码的时候我们为了规范化,一般会加文件注释.类注释和函数注释 用注释来说明我们的代码,也方便模块化开发 那么我们在写注释的时候经常会写一些重复的内容,我们会复制粘 ...
- 图文详解Java对象内存布局
作为一名Java程序员,我们在日常工作中使用这款面向对象的编程语言时,做的最频繁的操作大概就是去创建一个个的对象了.对象的创建方式虽然有很多,可以通过new.反射.clone.反序列化等不同方式来创建 ...