【Android逆向】破解看雪 test1.apk
1. 获取apk,并安装至手机
apk 获取地址: https://www.kanxue.com/work-task_read-800624.htm
adb install -t test1.apk
# 这个apk必须加-t ,否则会报错
2. 只有一个输入框,随便输入内容,提示壮士继续加油
3. 将apk拖入到jadx中观察
public class MainActivity extends AppCompatActivity {
TextView message_tv;
EditText password_et;
EditText username_et;
public static native String doMath(byte[] bArr);
static {
System.loadLibrary("roysue");
}
/* JADX INFO: Access modifiers changed from: protected */
@Override // androidx.appcompat.app.AppCompatActivity, androidx.fragment.app.FragmentActivity, androidx.activity.ComponentActivity, androidx.core.app.ComponentActivity, android.app.Activity
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.username_et = (EditText) findViewById(R.id.editText);
this.message_tv = (TextView) findViewById(R.id.textView);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { // from class: com.roysue.easyso1.MainActivity.1
@Override // android.view.View.OnClickListener
public void onClick(View v) {
String res = MainActivity.doMath(MainActivity.this.username_et.getText().toString().getBytes());
if (res.compareTo("cjB5c3VlbGwwdmV5MHVzMG11Y2g=\n") == 0) {
MainActivity.this.message_tv.setText("恭喜你!");
} else {
MainActivity.this.message_tv.setText("壮士请继续加油!");
}
}
});
}
}
4. 从代码中疑似感觉这个字符串是个base64加密的字符串,看看native中的逻辑确定一下猜想
5. 加压apk将libroysue.so拖入IDA中进行观察
【1】导出表中搜索 doMath函数,发现没有,说明是动态注册,搜索JNI_OnLoad
jint JNI_OnLoad(JavaVM *vm, void *reserved)
{
JNIEnv *env; // [sp+10h] [bp-10h] BYREF
env = 0;
if ( _JavaVM::GetEnv(vm, (void **)&env, 65542) )
return -1;
if ( !env )
_assert2(
"/root/Desktop/202104test/easyso1/app/src/main/cpp/roysue.cpp",
60,
"jint JNI_OnLoad(JavaVM *, void *)",
"env != nullptr");
if ( registerMethods(env, "com/roysue/easyso1/MainActivity", method_table, 1) )
return 65542;
else
return -1;
}
说明关联的函数在 method_table中,点击观察 method_table
.data:00004000 ; ===========================================================================
.data:00004000
.data:00004000 ; Segment type: Pure data
.data:00004000 AREA .data, DATA
.data:00004000 ; ORG 0x4000
.data:00004000 ; JNINativeMethod method_table[1]
.data:00004000 09 26 00 00 10 26 00 00 B1 09+_ZL12method_table JNINativeMethod <aDomath, aBLjavaLangStri, _Z3mmmP7_JNIEnvP7_jclassP11_jbyteArray+1>
.data:00004000 00 00 ; DATA XREF: JNI_OnLoad+56↑o
.data:00004000 ; JNI_OnLoad+58↑o
.data:00004000 ; .text:off_B74↑o
.data:00004000 ; mmm(_JNIEnv *,_jclass *,_jbyteArray *) ...
.data:0000400C ; unw_addr_space_t unw_local_addr_space
.data:0000400C 10 40 00 00 unw_local_addr_space DCD _ZN9libunwind17LocalAddressSpace17sThisAddressSpaceE ; libunwind::LocalAddressSpace::sThisAddressSpace
.data:0000400C ; .data ends
.data:0000400C
可以看到 Domath 关联的函数叫mmm(aDomath,aBLjavaLangStri,_Z3mmmP7_JNIEnvP7_jclassP11_jbyteArray+1)
点击_Z3mmmP7_JNIEnvP7_jclassP11_jbyteArray,观察
jobject __fastcall mmm(JNIEnv *env, jclass clazz, jbyteArray bytearray)
{
_jmethodID *StaticMethodID; // r0
_jclass *clazza; // [sp+10h] [bp-18h]
clazza = _JNIEnv::FindClass(env, "android/util/Base64");
StaticMethodID = _JNIEnv::GetStaticMethodID(env, clazza, "encodeToString", "([BI)Ljava/lang/String;");
return _JNIEnv::CallStaticObjectMethod(env, clazza, StaticMethodID, bytearray, 0);
}
由此可得,确实是对传入的字符串进行base64处理,然后对结果进行比对,
于是解码可得flag为r0ysuell0vey0us0much
adb shell input text "r0ysuell0vey0us0much" 提交通过
【Android逆向】破解看雪 test1.apk的更多相关文章
- Android逆向破解表单注册程序
Android逆向破解表单注册程序 Android开发 ADT: android studio(as) 程序界面如下,注册码为6位随机数字,注册成功时弹出通知注册成功,注册失败时弹出通知注册失败. 布 ...
- Android逆向破解表单登录程序
Android逆向破解表单登录程序 Android开发 ADT: android studio(as) 程序界面如下,登录成功时弹出通知登录成功,登录失败时弹出通知登录失败. 布局代码 <?xm ...
- Android逆向——破解水果大战
最近公司需要测试安卓app安全,但安卓基本上0基础,决定开始学习下安卓逆向根据吾爱破解上教程 <教我兄弟学Android逆向系列课程+附件导航帖> https://www.52pojie. ...
- Android逆向 破解第一个Android程序
这节正式开始破解编写的第一个Android工程,打开Android Killer,把第一节自己编写的Android apk拖入Android Killer. PS: 如果Android Killer不 ...
- Android逆向破解:Android Killer使用
目录 目录 软件介绍 Android Killer是一款可以对APK进行反编译的工具,它能够对反编译后的Smali文件进行修改,并将修改后的文件进行打包. 软件下载 这里用的是@昨夜星辰2012 ...
- Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...
- Android 逆向实战篇(加密数据包破解)
1. 实战背景由于工作需要,要爬取某款App的数据,App的具体名称此处不便透露,避免他们发现并修改加密逻辑我就得重新破解了. 爬取这款App时发现,抓包抓到的数据是加密过的,如图1所示(原数据较长, ...
- Android逆向分析(2) APK的打包与安装背后的故事
前言 上一次我们反编译了手Q,并遇到了Apktool反编译直接crash的问题,虽然笔者很想在这次解决这个问题,但在解决途中,发现该保护依赖于很多知识,所以本次先插入一下,正所谓知其然知其所以然,授之 ...
- Android逆向分析(2) APK的打包与安装
http://blog.zhaiyifan.cn/2016/02/13/android-reverse-2/ 2/18日增加对aidl和java编译的描述. 前言 上一次我们反编译了手Q,并遇到了Ap ...
- 看雪论坛 破解exe 看雪CTF2017第一题分析-『CrackMe』-看雪安全论坛
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 逆向 黑客 破解 学习 论坛 『CrackMe』 http://bbs.pediy.co ...
随机推荐
- [转帖]tidb backup
https://docs.pingcap.com/zh/tidb/v4.0/sql-statement-restore BACKUP 语句使用的引擎与 BR 相同,但备份过程是由 TiDB 本身驱动, ...
- [转帖]TiKV 内存调优
TiDB试用 来源:TiDB 浏览 87 扫码 分享 2023-05-09 09:02:19 TiKV 内存参数性能调优 参数说明 TiKV 内存使用情况 TiKV 机器配置推荐 TiKV 内存参数 ...
- [转帖]kafka漏洞升级记录,基于SASL JAAS 配置和 SASL 协议,涉及版本3.4以下
攻击者可以使用基于 SASL JAAS 配置和 SASL 协议的任意 Kafka 客户端,在对 Kafka Connect worker 创建或修改连接器时,通过构造特殊的配置,进行 JNDI 注入. ...
- [转帖]Linux AWK工作原理
https://www.cnblogs.com/yeyuzhuanjia/p/13967513.html 本篇文章我们主要为大家介绍 AWK 是如何工作的. AWK 工作流程可分为三个部分:1.读输入 ...
- [转帖]Tcpdump抓包命令
tcpdump和ethereal可以用来获取和分析网络通讯活动,他们都是使用libpcap库来捕获网络封包的. 在混杂模式下他们可以监控网络适配器的所有通讯活动并捕获网卡所接收的所有帧. 要想设置 ...
- 跨主机Docker容器通信的学习
背景 骨折在家找自己的人比较少. 又因为出不去也没法做运动,就不如将之前没学习深入的地方学习下 先是进行Docker 搭建 redis cluster的处理. 当时发现必须使用 --net=host进 ...
- WebAssembly入门笔记[1]:与JavaScript的交互
前一阵子利用Balazor开发了一个NuGet站点,对WebAssembly进行了初步的了解,觉得挺有意思.在接下来的一系列文章中,我们将通过实例演示的方式介绍WebAssembly的一些基本概念和编 ...
- C/C++ 静态编译SQLITE数据库API
C/C++ 编译并使用Sqlite数据库,实现增删改查. 首先下载数据库: https://sqlite.org/download.html 分别下载:sqlite-amalgamation-3350 ...
- 东吴名贤传<二>薛综传
古典记载 吴录曰:其先齐孟尝君封於薛.秦灭六国,而失其祀,子孙分散.汉祖定天下,过齐,求孟尝后,得其孙陵.国二人,欲复其封.陵.国兄弟相推,莫適受,乃去之竹邑,因家焉,故遂氏薛.自国至综,世典州郡, ...
- Hadoop超详细讲解之单节点搭建
1 Hadoop介绍 Hadoop是Apache旗下的一个用java语言实现开源软件框架,是一个开发和运行处理大规模数据的软件平台.允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理. ...