1. apk 安装到手机,需要输入内容,随便输入,提示fail...

2. apk 导入到jadx中查看一下

MainActivity.java

String textData = "b2FueHVl";
...
String roysue_1 = Test.hallbBase64(MainActivity.this.username_et.getText().toString());
if (roysue_1.compareTo(MainActivity.this.textData) == 0) {
Toast.makeText(MainActivity.this.getApplicationContext(), "sucess.....", 0).show();
} else {
Toast.makeText(MainActivity.this.getApplicationContext(), "fail.....", 0).show();
}
...

在这里注册了native方法

Test.java

public class Test {
public static native String hallbBase64(String str); public static native String hellaBase64(String str); public static native String hellbBase64(String str); public static native String helloBaae64(String str); public static native String helloBasa64(String str); public static native String helloBase64(String str); static {
System.loadLibrary("ooo");
System.loadLibrary("ooo111");
System.loadLibrary("ooo2222");
System.loadLibrary("ooo333");
}
}

这里应该是考察到底是哪个so对应着真正的方法,使用jnitrace 看一下

jnitrace -l libooo333.so -l libooo2222.so -l libooo111.so -l libooo.so com.zapata.r0zapatanative

ps: 跟github描述的不符合, 不能使用 -l *,否则会报错

输入内容 123456789

      /* TID 930 */
5307 ms [+] JavaVM->GetEnv
5307 ms |- JavaVM* : 0x77a54cf500
5307 ms |- void** : 0x7fca40acb0
5307 ms |: 0x77a5445ea0
5307 ms |- jint : 65542
5307 ms |= jint : 0 5307 ms ------------------------------------Backtrace------------------------------------
5307 ms |-> 0x778910131c: _ZN7_JavaVM6GetEnvEPPvi+0x34 (libooo333.so:0x7789100000)
5307 ms |-> 0x778910131c: _ZN7_JavaVM6GetEnvEPPvi+0x34 (libooo333.so:0x7789100000) /* TID 930 */
5311 ms [+] JNIEnv->FindClass
5311 ms |- JNIEnv* : 0x77a5445ea0
5311 ms |- char* : 0x77891014e8
5311 ms |: com/zapata/r0zapatanative/Test
5311 ms |= jclass : 0x81 { com/zapata/r0zapatanative/Test } 5311 ms -------------------------------------Backtrace-------------------------------------
5311 ms |-> 0x7789101354: _ZN7_JNIEnv9FindClassEPKc+0x2c (libooo333.so:0x7789100000)
5311 ms |-> 0x7789101354: _ZN7_JNIEnv9FindClassEPKc+0x2c (libooo333.so:0x7789100000)

从日志上看,锁定是libooo333.so

3. 使用 IDA 打开libooo333.so看看,最终会调用到一个base64_enc 的函数,改函数使用了一个byte_13A8 的数组

.rodata:00000000000013A8 41 42 43 44 45 46 47 48 49 4A+aAbcdefghijklmn DCB "ABCDEFGHIJKLMNOPQRSTUVWXYZbacdefghijklmnopqrstuvwxyz0123456789+/"
.rodata:00000000000013A8 4B 4C 4D 4E 4F 50 51 52 53 54+ ; DATA XREF: base64_enc(char const*,char *)+10↑o
.rodata:00000000000013E8 FF unk_13E8 DCB 0xFF ; DATA XREF: base64_dec(char *,char *)+BC↑o

明显就是一个base64的字典

使用CyberChef , 输入反编译的那个验证字符串看看(字典设置为 ABCDEFGHIJKLMNOPQRSTUVWXYZbacdefghijklmnopqrstuvwxyz0123456789+/)



成功得到正确密码

【Android 逆向】r0zapataNative.apk 破解的更多相关文章

  1. Android逆向之旅---破解"穿靴子的猫"游戏的收费功能

    一.游戏收费分析 游戏收费非常正常的,可是玩游戏最恶心的就是你还没玩就要充值,非常恼火,事实上我不怎么玩游戏,主要是给小孩子们弄,比方如今好多小屁孩们喜欢玩水果忍者这个游戏.可是这个游戏在没有開始玩的 ...

  2. Android逆向基础----APK文件结构

    参考这个博客 http://www.cnblogs.com/wangtianxj/archive/2010/06/13/1757639.html http://blog.csdn.net/bupt07 ...

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

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

  4. Android逆向之旅---静态分析技术来破解Apk

    一.前言 从这篇文章开始我们开始我们的破解之路,之前的几篇文章中我们是如何讲解怎么加固我们的Apk,防止被别人破解,那么现在我们要开始破解我们的Apk,针对于之前的加密方式采用相对应的破解技术,And ...

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

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

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

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

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

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

  8. Android动态方式破解apk终极篇(加固apk破解方式)

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

  9. android: 使用android逆向助手反编译APK

    第一步:下载逆向助手:(链接: https://pan.baidu.com/s/15jtoFDg9LWV80HREeyx5HA 提取码: k527 ) 第二步:将apk文件拷贝到逆向助手的apktoo ...

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

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

随机推荐

  1. [转帖]prometheus的TCP alloc取值

    prometheus的TCP alloc取值 sockets: used:已使用的所有协议套接字总量 TCP: orphan:无主(不属于任何进程)的TCP连接数(无用.待销毁的TCP socket数 ...

  2. [转帖]Kafka Dashboard

    https://grafana.com/grafana/dashboards/18276-kafka-dashboard/ Kafka resource usage and consumer lag ...

  3. [转帖]elasticsearch-create-enrollment-tokenedit

    https://www.elastic.co/guide/en/elasticsearch/reference/current/create-enrollment-token.html The ela ...

  4. [转帖] jq命令用法总结

    https://www.cnblogs.com/codelogs/p/16324928.html 原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 如果说要给Li ...

  5. Redis monitor命令

    MONITOR Syntax MONITOR Available since: 1.0.0 Time complexity: ACL categories: @admin, @slow, @dange ...

  6. 小Min_25筛小记🐤

    这里的小Min_25筛,可以筛出 $10^11$ 以内所有质数的完全积性函数之和 注意事项: 1. cmd 的题解里面下标写得不清楚,应该是 $S'(p_k-1,k-1)$ 而不是 $S'(p_{k- ...

  7. echarts给每个柱状图配置不同的颜色

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 开源IM项目OpenIM 客户端SDK架构剖析-确保消息的有序性,以及消息百分百可达

    开源IM项目OpenIM第二版对于客户端架构进行了局部重构,解决了消息触发时序等bug,也梳理了内部模块.目前已经接近尾声,本文重点讲解SDK架构,以便大家深入了解OpenIM,并希望大家能深度参与开 ...

  9. 设计模式学习-使用go实现命令模式

    命令模式 定义 优点 缺点 适用范围 代码实现 命令模式对比策略模式 参考 命令模式 定义 命令模式(Command):将一个请求封装成一个对象,从而是你可用不同的的请求对客户进行参数化:对请求排队或 ...

  10. python处理Excel实现自动化办公教学(含实战)【一】

    相关文章: python处理Excel实现自动化办公教学(含实战)[一] python处理Excel实现自动化办公教学(含实战)[二] python处理Excel实现自动化办公教学(数据筛选.公式操作 ...