一、首先把apk拖到jeb看smali/java代码,发现是需要进so调试的

public class MainActivity extends Activity {public Button btn_submit;public EditText inputCode;static {System.loadLibrary("crackme");}@Override  // android.app.Activityprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(0x7F030000);  // layout:activity_mainthis.getWindow().setBackgroundDrawableResource(0x7F020000);  // drawable:bgthis.inputCode = (EditText)this.findViewById(0x7F060000);  // id:inputcodethis.btn_submit = (Button)this.findViewById(0x7F060001);  // id:submitthis.btn_submit.setOnClickListener(new View.OnClickListener() {@Override  // android.view.View$OnClickListenerpublic void onClick(View v) {String v1 = MainActivity.this.inputCode.getText().toString();if(MainActivity.this.securityCheck(v1)) {  <------JNI方法Intent i = new Intent(MainActivity.this, ResultActivity.class);MainActivity.this.startActivity(i);return;}Toast.makeText(MainActivity.this.getApplicationContext(), "验证码校验失败", 0).show();}});}public native boolean securityCheck(String arg1) {}
}

二、静态调试解压apk,把libcrackme.so拖进ida_pro

signed int __fastcall Java_com_yaotong_crackme_MainActivity_securityCheck(int a1, int a2, int a3)
{int v3; // r5int v4; // r4unsigned __int8 *v5; // r0char *v6; // r2int v7; // r3signed int v8; // r1v3 = a1;v4 = a3;if ( !byte_B4CDA359 ){sub_B4CD6494(&unk_B4CDA304, 8, &unk_B4CD846B, &unk_B4CD8468, 2, 7);byte_B4CDA359 = 1;}if ( !byte_B4CDA35A ){sub_B4CD64F4(&unk_B4CDA36C, 25, &unk_B4CD8530, &unk_B4CD8474, 3, 117);byte_B4CDA35A = 1;}_android_log_print(4, &unk_B4CDA304, &unk_B4CDA36C);v5 = (unsigned __int8 *)(*(int (__fastcall **)(int, int, _DWORD))(*(_DWORD *)v3 + 676))(v3, v4, 0);v6 = off_B4CDA28C;  <-------双击这个看看是什么,结果是wojiushidaan,输入到apk里发现不对,看来要动态调试了while ( 1 ){v7 = (unsigned __int8)*v6;if ( v7 != *v5 )break;++v6;++v5;v8 = 1;if ( !v7 )return v8;}return 0;
}

三、id_pro动态调试securityCheck函数

1、android里推入android_server(看你的机型)
2、启动android_server
3、启动apk,ida_pro attach进程后,找到Java_com_yaotong_crackme_MainActivity_securityCheck函数,在静态分析失败的那个v6处打断点
4、执行debug,发现进不来,估计是jni_onload的时候有反调试

四、id_pro动态调试ni_onload函数

1、android里推入android_server(看你的机型)
2、启动android_server
3、adb shell am start -D -n com.yaotong.crackme/.MainActivity
4、启动jdb调试(可以在程序入口处,停住jvm进程)

adb shell
su
ps | grep com.yaotong.crackme
adb forward tcp:8700 jdwp:上一步的进程号
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700 (注意,android-studio不能开,会冲突)

5、ida_pro attach进程,找到Java_com_yaotong_crackme_MainActivity_securityCheck函数,在静态分析失败的那个v6处打断点
在c语言处打断点,发现不了问题
在汇编处打断点

; Attributes: bp-based frameEXPORT JNI_OnLoad
JNI_OnLoadvar_20= -0x20STMFD   SP!, {R4-R9,R11,LR}   <------在这打断点
ADD     R11, SP, #0x18
SUB     SP, SP, #8
MOV     R4, R0
LDR     R0, =(_GLOBAL_OFFSET_TABLE_ - 0xB4CD5BC0)
LDR     R9, =(unk_B4CDA290 - 0xB4CD9FBC)
MOV     R8, #0....BLX     R7 <---在这一步退出了。

再次进入调试,看见运行到BLX跳转指令时
在general registers窗口中看到R7 寄存器中是pthread_create函数,是Linux中新建一个线程的方法
所以在静态分析中注释他37 FF 2F E1 改为 00 00 00 00,保存so包

五、反编译,回编译,签名

1、apktool d AliCrackme.apk 生成AliCrackme文件夹
2、替换AliCrackme文件夹中的libcrackme.so
3、apktool b AliCrackme 后取出dist文件夹中AliCrackme.apk
4、签名
java -jar signapk.jar platform.x509.pem platform.pk8 AliCrackme.apk AliCrackme_sign.apk
5、安装AliCrackme_sign.apk包

六、再次id_pro动态调试securityCheck函数

找到Java_com_yaotong_crackme_MainActivity_securityCheck函数,在静态分析失败的那个v6处打断点
发现v6寄存器里是aiyou,bucuoo,密码就是这个。破解结束

参考:
分析一个安卓简单CrackMe
实战分析一个Crackme的过程
IDA动态调试破解AliCrackme与反调试对抗

第一篇文章里没有反反调试
第二篇文章里,地址算法有点问题
第三篇文章比较好,然后第三篇里又推荐了Android逆向之旅—动态方式破解apk进阶篇(IDA调试so源码)也很不错

AliCrackme.apk 破解相关推荐

  1. Android APK破解、反编译、打包签名基本思路与方法

    Android APK破解.反编译.打包签名基本思路与方法 2013年6月1日星期六                                                           ...

  2. 安卓漏洞(apk破解总览)

    安卓常见漏洞有,APK破解.不安全的用户数据存储.任意备份漏洞.不安全的数据传输.不安全的加密算法.组件导出拒绝服务漏洞等,我们这次主要研究的是apk破解 APK的破解主要有apk篡改(二次打包与重签 ...

  3. apk破解(一)从最简单的判断开始

    大部分的测试代码都将是我亲手完成,源码地址在这里. 工欲善其事,必先利其器. 破解你可能会用到的工具在这里. 而我将使用Apk改之理,下载链接. 下面正式开始: 首先,拿到了一个这样的apk,要做的第 ...

  4. apk破解工具,使用android Killer 踩过的坑

    首先下载工具 android killer这个网上搜一下都可以找到 下载后需要配置sdk,电脑配置好java环境后就可以使用了 上面做好后给killer配置 sdk配置好后就给android 配置签名 ...

  5. Android APK破解

    原文: http://www.blogjava.net/zh-weir/archive/2011/06/11/352099.html 所谓APK指的是Android操作系统的应用程序安装文件.所谓Cr ...

  6. Android逆向之旅---动态方式破解apk终极篇(加固apk破解方式)

    一.前言 今天总算迎来了破解系列的最后一篇文章了,之前的两篇文章分别为: 第一篇:如何使用Eclipse动态调试smali源码 第二篇:如何使用IDA动态调试SO文件 现在要说的就是最后一篇了,如何应 ...

  7. 【apk破解尝试之旅】-——apk文件的反编译与回编译

    前段时间玩了个手游,中途碰到一个副本迟迟无法攻破,又不没钱氪金,想着弄个破解版的,搜了半天没找到,于是决定自己动手干! 首先要对apk有个初步的了解,..apk文件是一种压缩文件,网上有种说法:apk ...

  8. Android apk破解反编译应用-EasyDump

    大家好,今天与大家分享一个很easy的反编译应用-EasyDump,它主要有以下优点: 1.支持加固后的编译,主包包括360加固.百度加固.腾讯加固.爱加密.梆梆加固. 2.不需要手机root就可以反 ...

  9. Android逆向之旅---动态方式破解apk终极篇 加固apk破解方式

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 一.前言 ...

最新文章

  1. day13 Java学习(常见对象正则表达式)
  2. Python Django 参数解包及代码示例
  3. 30.32.33.词云图、3D绘图、矩阵可视化、绘制混淆矩阵
  4. JSP + AJAX 打造簡單聊天室
  5. day05 selenium库的基础使用
  6. mysql关系模式怎么画_关系数据库与mysql
  7. Node.js 应用故障排查手册 —— 大纲与常规问题指标简介
  8. 非资深玩家留言频率限制(1024秒限制)
  9. 【C++】获取二维数组的行和列
  10. Java从入门到熟悉的48道练习题[完结]
  11. 马尔科夫链(Markov Chain, MC)算法详解及Python实现
  12. 解决vue页面四周有白边的问题
  13. 玩聚榜单-仿照Technorati的Popular频道
  14. scratch的官方版本和其他的改编版本/小喵科技Kittenblock/snap!/TurboWarp
  15. Li feifei How we're teaching computers to understand pictures
  16. 百度鹰眼轨迹和虎鲸数据平台之浅谈
  17. 肌营养不良2020-2021最新治疗突破 肌营养不良2021最新进展
  18. 手把手教你写一个基于python+pyqt5的股票盯盘软件
  19. 富士通扫描仪PaperStream系列软件喜迎新成员;B2B音乐授权市场Songtradr完成D轮融资并获超额认购| 全球TMT...
  20. jenkins首次安装,该Jenkins实例似乎已离线等报错的解决方案

热门文章

  1. 功能强大的国产Api管理工具
  2. gurobi python_Gurobi
  3. 攻防世界--misc--新手区
  4. c语言粉红色的电脑字母代码,玫瑰花c语言代码
  5. 密码学里的数学知识之
  6. 区块链快速入门(一)——区块链简介
  7. php 同一ip请求次数,限定时间内同一ip只能访问一次
  8. 3.2 使用STC89C52控制MC20发送短信
  9. 自定义 UIViewController 转换动画: 开始
  10. 语法制导翻译(Syntax-Directed Translation)