Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >android题目 AliCrackme分析

android题目 AliCrackme分析

作者头像
tea9
发布于 2022-07-16 09:31:57
发布于 2022-07-16 09:31:57
84100
代码可运行
举报
文章被收录于专栏:tea9的博客tea9的博客
运行总次数:0
代码可运行

参考链接: https://www.52pojie.cn/thread-1315444-1-1.html apk包: 链接: https://pan.baidu.com/s/1jXfS1qJyZDflKhgzZb8zMQ 密码: htop

aliCrackme一道经典ctf老题了,主要学习下,记录下解题过程 本题知识点: so逆向分析、动态调试、反反调试 下载安装apk

随便输入发现输出验证码校验失败 用jadx打开apk 搜索验证码校验失败 jadx-gui 自毁程序密码_1.0原版.apk

分析代码,发现点击事件之后有个securityCheck方法,是native方法,需要分析so public native boolean securityCheck(String str);

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void onClick(View v) {
                if (MainActivity.this.securityCheck(MainActivity.this.inputCode.getText().toString())) {
                    MainActivity.this.startActivity(new Intent(MainActivity.this, ResultActivity.class));
                    return;
                }
                Toast.makeText(MainActivity.this.getApplicationContext(), "验证码校验失败", 0).show();
            }

解压自毁程序密码_1.0原版.apk 用IDA打开”自毁程序密码_1.0原版/lib/armeabi/libcrackme.so” 搜索securityCheck方法,按F5看下伪c代、

分析一下代码的执行,点击 v3 通过JNIEnv* 还原类似((_DWORD )v3 + 676))格式的指令,重命名以及注释的方式记录分析,如下图

分析代码发现v6是真实代码,双击off_628C查看v6的值

发现有个aWojiushidaan值,输入到密码框试试看

发现仍验证码校验失败,需要动态调试查看真实的值

IDA动态调试,要先吧android_server放到手机上

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adb push /Applications/IDAPro7.0-tea/ida.app/Contents/MacOS/dbgsrv/android_server /data/local/tmp
adb shell
su
cd /data/local/tmp
chmod 777 android_server
./android_server
adb forward tcp:23946 tcp:23946

打开IDA,选择Debugger-Select debugger

选择Remote ARM Linux/Android debugger

选择Debugger-Process options

填写Hostname、Port

选择Debugger-Attach to process

搜索com.yaotong.crackme,选择ok

Ctrl+S 搜索crackme,选择带x的

内存的绝对地址=so文件的基地址+要调试的函数的偏移量 记录基地址D7F1D6BC 在打开一个ida查找so文件偏移地址 mac 上 IDA双开 open -n /Applications/IDAPro7.0-tea/ida.app 打开后搜索选择check函数,按空格后查看地址,查看地址000011A8

然后D7F1D6BC+000011A8=D7F1E864 经计算可知,函数的绝对地址就是D7F1E864在IDA中 使用快捷键G跳转到地址的位置,也就是要调试的函数位置

按F2打断点,按F8继续运行(F8单步调试不进入函数F7单步调试进入函数 然后发现app直接崩溃了,应该是有反调试

修改应用为debuggable

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ro.debuggable app全局可调试
可读权限
mount -o remount,rw /
vi /system/etc/prop.default
修改为ro.debuggable=1
保存
mount -o remount,ro /

然后重启下手机 测试用debug模式启动app adb shell am start -D -n com.yaotong.crackme/.MainActivity

查看进程

检测是否被调试:利用Linux系统 ptrace 来实现,当应用被调试时应用内存里的TracerPid字段就不为0,只要是不为0的时候,就会直接的退出程序,达到反调试的目的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
进入设备
adb shell
获取root权限
su
获取app的进程id
ps |grep 软件的包名
ps -e |grep com.yaotong.crackme
u0_a262      15716   648 1703812  74120 SyS_epoll_wait e9aa0504 S com.yaotong.crackme
查看进程的信息及TracerPid值: 
cat  /proc/进程ID/status
marlin:/ # cat /proc/15716/status
直接查看TracerPid
marlin:/ # cat /proc/15716/status |grep TracerPid                                                 
TracerPid:	0

用debug模式启动 adb shell am start -D -n com.yaotong.crackme/com.yaotong.crackme.MainActivity IDA打开Debugger-Debugger options

选择Suspend on thread start/exit、Suspend on library load/unload

1.用调试模式打开app adb shell am start -D -n com.yaotong.crackme/com.yaotong.crackme.MainActivity 2.ida进行调试,调试选项勾选选择Suspend on thread start/exit、Suspend on library load/unload 打开ida不用打开so直接进行调试 3.启动jdb ps -e | grep com.yaotong.crackme adb forward tcp:8700 jdwp:4495(4495为上面获得的APP进程ID) jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

设置未捕获的java.lang.Throwable
设置延迟的未捕获的java.lang.Throwable
正在初始化jdb...
> 

3.搜索crackme.so,在jni_onload上下断点

app会停到没有加载的地方

按F8然后Ctrl+s搜索crackme,如果没有就在进行单步调试直到搜索到crackme

记录D7DB06BC然后静态找JNI_ONLoad的地址00001B9C D7DB06BC+00001B9C=D7DB2258 按g跳转到该地址下断点,单步执行到jni_onload

停到JNI_Onload里了

BLX R7的位置跳了出去,很可疑的位置需要重点注意 静态分析找到R7的位置进行修改

切换hex view

用010打开crackme.so 找到37 FF 2F E1位置修改为 00 00 00 00

然后保存

反编译重打包app

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apktool d 自毁程序密码_1.0原版.apk -o 1
替换so文件
打开1/dist目录给打包的app签名
java -jar uber-apk-signer-1.1.0.jar -a 自毁程序密码_1.0原版.apk --allowResign 
adb uninstall com.yaotong.crackme 
adb install 自毁程序密码_1.0原版-aligned-debugSigned.apk

正常启动app 打开IDA进行调试,给check函数下断点,在断点停下了

按F5,查看v6的值发现是aiyou,bucuoo

在输入框中输入

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
IDA动态调试so源码 F5伪代码查看
注意:so的动态调试与脱壳在步骤上有很多的相似之处,关于脱壳在后面会详细介绍加壳以及脱壳的发展历程。
bosh123
2020/12/23
3.5K0
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)[转]include <stdio.h>int func(int a, int b, int c, int d, int e,
声明:本文转自Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码),此文干货很多。
用户2930595
2018/08/23
4.3K0
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)[转]include <stdio.h>int func(int a, int b, int c, int d, int e,
android 壳特征
类加载技术: 针对apk中的classes.dex文件进行处理,放入待定的文件中,通过native代码来进行对其运行时解密。
tea9
2022/09/08
1.3K0
android 壳特征
Android逆向分析大全
Android程序的特点相比在于使用混淆方式打包,将包名、类名、函数名改成不易看懂的字母,从而使生成的apk小很多(android studio提供了release编译方式,使用proguard混淆),因此反编译apk最多的工作在于重构这些名称,这一点和pc上一致,对于android native程序(jni)则和pc上基本一致,不同之处在于常见的是arm汇编。
bosh123
2020/12/22
3.7K0
解密所有APP运行过程中的内部逻辑
0x01前言 这年头,apk全都是加密啊,加壳啊,反调试啊,小伙伴们表示已经不能愉快的玩耍了。静态分析越来越不靠谱了,apktool、ApkIDE、jd GUI、dex2jar等已经无法满足大家的需求了。那么问题就来了,小伙伴们真正需要的是什么?好的,大家一起呐喊出你内心的欲望吧,我们的目标是——“debug apk step by step”。 0x02那些不靠谱的工具 先来说说那些不靠谱的工具,就是今天吭了我小半天的各种工具,看官上坐,待我细细道来。 2.1 IDA pro IDA pro6.6之后加入
FB客服
2018/02/05
1.9K0
解密所有APP运行过程中的内部逻辑
开始激活成功教程so文件_so文件格式怎么打开
简单分析指令代码: 1>、PUSH {r3-r7,lr} 是保存r3,r4,r5,r6,r7,lr 的值到内存的栈中;与之对应的是POP {r3-r7,pc}
全栈程序员站长
2022/11/04
4K0
开始激活成功教程so文件_so文件格式怎么打开
android 防止反编译的若干方法
第一种方式:混淆策略 混淆策略是每个应用必须增加的一种防护策略,同时他不仅是为了防护,也是为了减小应用安装包的大小,所以他是每个应用发版之前必须要添加的一项功能,现在混淆策略一般有两种: 对代码的
xiangzhihong
2018/02/01
2.7K0
android 防止反编译的若干方法
从IDA动态调试方法到ARM三级流水线的分析到实操
IDA动态调用手机apk,请参考:安卓逆向-从环境搭建到动态调试apk IDA部分https://www.freebuf.com/articles/mobile/285861.html
FB客服
2021/10/11
2.2K0
apktool动态破解apk
那么今天我们就用另外一种方式来破解apk:动态方式,关于动态方式其实很广义的,因为动态方式相对于静态方式来说,难度大一点,但是他比静态方式高效点,能够针对更过的破解范围。当然动态方式很多,所以这里就分为三篇文章来讲解这块: 1、动态方式破解apk前奏篇(Eclipse动态调试smail源码) 2、动态方式破解apk升级篇(IDA动态调试so源码) 3、动态方式破解apk终极篇(应对加固的apk破解方法) 从这三篇文章能够让我们破解一般的apk没有任何问题,不过不能代表能够破解所有的apk,因为没有
xiangzhihong
2018/02/01
2.7K0
apktool动态破解apk
Android逆向之动态分析so篇
本期,斗哥将给大家带来Android逆向的动态分析,简述Android动态分析环境配置与IDA调试so文件。
漏斗社区
2018/10/23
3.8K0
Android逆向之动态分析so篇
【愚公系列】2021年12月 攻防世界-简单题-MOBILE-008(Ph0en1x-100)
文章目录 一、Ph0en1x-100 二、答题步骤 1.jadx反编译apk文件 2.IDA 3.apktool,模拟器动态调试 3.JEB 总结 一、Ph0en1x-100 题目链接:https:/
愚公搬代码
2021/12/18
6000
【愚公系列】2021年12月 攻防世界-简单题-MOBILE-008(Ph0en1x-100)
Android逆向分析从入门到深入
学习逆向的初衷是想系统学习Android下的hook技术和工具, 想系统学习Android的hook技术和工具是因为Android移动性能实战这本书. 这本书里用hook技术hook一些关键函数来计算关键函数的调用参数和调用时长, 从而确定性能问题发生的位置和原因. 但目前没有比较系统的讲解hook的书籍, 所以就系统的了解下逆向分析.
用户7118204
2020/03/24
1.3K0
Android逆向分析概述
学习逆向的初衷是想系统学习Android下的hook技术和工具, 想系统学习Android的hook技术和工具是因为Android移动性能实战这本书. 这本书里用hook技术hook一些关键函数来计算关键函数的调用参数和调用时长, 从而确定性能问题发生的位置和原因. 但目前没有比较系统的讲解hook的书籍, 所以就系统的了解下逆向分析.
望天
2018/08/02
1.5K0
Android逆向分析概述
Android逆向(教程更新)|ida动态分析
声明:所有实验含部分虚构,纯属技术练习,未对真实环境造成任何影响。也请勿将相关技术用于非法操作,否则责任自负。
辞令
2021/11/02
2.2K0
Android逆向分析从入门到深入
学习逆向的初衷是想系统学习Android下的hook技术和工具, 想系统学习Android的hook技术和工具是因为Android移动性能实战这本书. 这本书里用hook技术hook一些关键函数来计算关键函数的调用参数和调用时长, 从而确定性能问题发生的位置和原因. 但目前没有比较系统的讲解hook的书籍, 所以就系统的了解下逆向分析.
望天
2019/09/26
4.4K0
Android逆向分析从入门到深入
IDA动态调试破解登录验证——阿里安全赛案例
链接:https://pan.baidu.com/s/10YWUj7BDcZ-3sY0oOqczHw 提取码:cxh4
axiomxs
2021/11/26
1.2K0
Android app反调试与代码保护的一些基本方案
| 导语 本文介绍Android app代码(java + ndk)的反调试的方法和保护代码增加逆向难度的一些基本方法。 Android自问世以来得以迅速发展,各大手机厂商纷纷投入成本开发、设计开发自己的Android系统,从2016年开始,Android已经超越ios成为全球最有影响力的操作系统。针对于Android app的逆向方法和逆向工具很多,所以反调试对于Android的代码保护扮演着很重要的角色。本文从四个方面介绍一下Android反调试的一些方法。 ps:反调试并不能完全阻止逆向行为,只是在
腾讯Bugly
2019/05/16
3.5K0
Android app反调试与代码保护的一些基本方案
Android APP安全防护总结
使用Lint对无用资源进行清理,而Lint则可以检查所有无用的资源文件,只要使用命令./gradlew lint或者在Android Studio工程中点击Analyze->Inspect Code,选择Whole Project点击ok就行。它在检测完之后会提供一份详细的资源文件清单,并将无用的资源列在“UnusedResources: Unused resources” 区域之下。只要你不通过反射来反问这些无用资源,你就可以放心地移除这些文件了。
天钧
2020/02/17
1.6K0
【愚公系列】2023年04月 攻防世界-MOBILE(APK逆向)
adb以调试方式打开应用,会出现这界面,说明成功,出现上面页面就可以在JEB3里面进入app的调试
愚公搬代码
2023/04/21
3070
【愚公系列】2023年04月 攻防世界-MOBILE(APK逆向)
[re入门]IDA和OD的基本使用(持续更新)
空格:切换代码窗口的显示方式(在图形窗口与文本窗口之间切换) 窗口介绍:“View”–“open subviews”, 可以看到IDA的各个子窗口
李鹏华
2024/03/12
7110
[re入门]IDA和OD的基本使用(持续更新)
相关推荐
IDA动态调试so源码 F5伪代码查看
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验