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的更多相关文章

  1. Android逆向破解表单注册程序

    Android逆向破解表单注册程序 Android开发 ADT: android studio(as) 程序界面如下,注册码为6位随机数字,注册成功时弹出通知注册成功,注册失败时弹出通知注册失败. 布 ...

  2. Android逆向破解表单登录程序

    Android逆向破解表单登录程序 Android开发 ADT: android studio(as) 程序界面如下,登录成功时弹出通知登录成功,登录失败时弹出通知登录失败. 布局代码 <?xm ...

  3. Android逆向——破解水果大战

    最近公司需要测试安卓app安全,但安卓基本上0基础,决定开始学习下安卓逆向根据吾爱破解上教程 <教我兄弟学Android逆向系列课程+附件导航帖> https://www.52pojie. ...

  4. Android逆向 破解第一个Android程序

    这节正式开始破解编写的第一个Android工程,打开Android Killer,把第一节自己编写的Android apk拖入Android Killer. PS: 如果Android Killer不 ...

  5. Android逆向破解:Android Killer使用

    目录   目录 软件介绍 Android Killer是一款可以对APK进行反编译的工具,它能够对反编译后的Smali文件进行修改,并将修改后的文件进行打包. 软件下载 这里用的是@昨夜星辰2012 ...

  6. Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)

    Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...

  7. Android 逆向实战篇(加密数据包破解)

    1. 实战背景由于工作需要,要爬取某款App的数据,App的具体名称此处不便透露,避免他们发现并修改加密逻辑我就得重新破解了. 爬取这款App时发现,抓包抓到的数据是加密过的,如图1所示(原数据较长, ...

  8. Android逆向分析(2) APK的打包与安装背后的故事

    前言 上一次我们反编译了手Q,并遇到了Apktool反编译直接crash的问题,虽然笔者很想在这次解决这个问题,但在解决途中,发现该保护依赖于很多知识,所以本次先插入一下,正所谓知其然知其所以然,授之 ...

  9. Android逆向分析(2) APK的打包与安装

    http://blog.zhaiyifan.cn/2016/02/13/android-reverse-2/ 2/18日增加对aidl和java编译的描述. 前言 上一次我们反编译了手Q,并遇到了Ap ...

  10. 看雪论坛 破解exe 看雪CTF2017第一题分析-『CrackMe』-看雪安全论坛

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 逆向 黑客 破解 学习 论坛 『CrackMe』 http://bbs.pediy.co ...

随机推荐

  1. 【转帖】Linux性能优化(十三)——CPU性能测试

    一.CPU上下文切换测试场景 使用sysbench模拟多线程调度: sysbench --threads=10 --time=300 threads run 使用vmstat查看CPU上下文切换: c ...

  2. 是否开启raid卡缓存的影响

    开启raid卡缓存 Write back 对IO性能的影响 背景 公司买了一台服务器. 想进行一下升级 但是因为管理员担心数据丢失, 使用了write through + (raid6 + hotsp ...

  3. UnixBench的简单测试与验证

    UnixBench的简单测试与验证 目标 飞腾2000+ (物理机和虚拟机) Intel Golden 6170 物理机 Intel Golden 5218 虚拟机 Gold 5218 CPU @ 2 ...

  4. Zabbix6.0的安装与IPMI的简单使用

    zabbix简介 1.zabbix的安装与使用 建议使用CentOS8进行部署, 不建议使用CentOS7, rpm包直接部署的话,CentOS8比较容易一些 支持mysql数据库.建议先期部署mys ...

  5. Dubbo架构设计与源码解析(一) 架构设计

    作者:黄金 一.架构演变 单应用架构 ----> 垂直架构 ----> 分布式架构 ----> 微服务架构 ----> 云原生架构 二.Dubbo总体架构 1.角色职能 • C ...

  6. vue3中watch监听不是你想的那样简单

    vue3 中watch监听数组,数组变化后未触发回调 今天发生了一个很神奇的现象,就是我使用watch监听数组时. 被监听的数组已经发生了变化.但是没有触发回调操作. 当时的我感到很疑惑? 不应该呀? ...

  7. 紫 distance

    仅此纪念我爆掉的T3 紫,即RE,运行出错,梦幻,而又不失杀气 根据<雪distance>改编,分为提交前,评测前,评测时,评测后 你说我考试AK,可我却运行出错 任凭无尽的懊悔将我淹没, ...

  8. TienChin 开篇-运行 RuoYiVue

    开篇 目的: 让大家随心所欲的 DIY 若依的脚手架 不会涉及到太多基础知识 踊跃提问(不懂得地方大家提问我会根据提问,后续一一解答疑惑) 下载 RuoYiVue Gitee: https://git ...

  9. 推荐系统[四]:精排-详解排序算法LTR (Learning to Rank)_ poitwise, pairwise, listwise相关评价指标,超详细知识指南。

    0.前言召回排序流程策略算法简介 推荐可分为以下四个流程,分别是召回.粗排.精排以及重排: 召回是源头,在某种意义上决定着整个推荐的天花板: 粗排是初筛,一般不会上复杂模型: 精排是整个推荐环节的重中 ...

  10. Python Selenium 库使用技巧

    Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE,Mozilla Firefox,Safari,Google ...