1. 豌豆荚下载v5.4的版本

2. 参考前面两篇文章进行反编译和重打包后,安装到手机发现会有验签失败的报错

抓取log

03-29 16:15:37.545 25910 26539 D KM-NATIVE: call Java_com_km_encryption_api_Security_sign
03-29 16:15:37.558 25910 26556 D KM-NATIVE: call Java_com_km_encryption_api_Security_sign
03-29 16:15:37.559 25910 26556 D KM-NATIVE: call Java_com_km_encryption_api_Security_sign

发现调取了这么个函数

3. 编写脚本查找这个native函数在哪个so里

var process_Obj_Module_Arr = Process.enumerateModules();
for(var i = 0; i < process_Obj_Module_Arr.length; i++) {
//包含"lib"字符串的
if(process_Obj_Module_Arr[i].path.indexOf("lib")!=-1)
{
//console.log("模块名称:",process_Obj_Module_Arr[i].name);
// console.log("模块地址:",process_Obj_Module_Arr[i].base);
// console.log("大小:",process_Obj_Module_Arr[i].size);
// console.log("文件系统路径",process_Obj_Module_Arr[i].path); var libname = process_Obj_Module_Arr[i].name
frida_Module_import(libname)
}
} function frida_Module_import(libname) {
Java.perform(function () {
const hooks = Module.load(libname);
var Imports = hooks.enumerateImports();
for(var i = 0; i < Imports.length; i++) {
if (Imports[i].name.indexOf('Java_com_km_encryption') != -1) {
console.log("模块名称:",libname); //函数类型
console.log("type:",Imports[i].type);
//函数名称
console.log("name:",Imports[i].name);
//属于的模块
console.log("module:",Imports[i].module);
//函数地址
console.log("address:",Imports[i].address);
}
}
});
}

发现在libcommon-encryption.so中

4. ida 打开看看

顺着sign,一路往下看,发现有个地方启动了一个线程,并执行了checkSignUseApplicationPackageManager方法

for ( i = 0; i < v34; ++i )
{
GetMethodID = (jmethodID (*)(JNIEnv *, jclass, const char *, const char *))&v37[2 * i];
*(_BYTE *)GetMethodID = byte_1F620[(unsigned __int8)v35[i] >> 4];
v47 = v35[i];
*((_BYTE *)GetMethodID + 1) = byte_1F620[v47 & 0xF];
}
v37[2 * v34] = 0;
_android_log_print(3, "KM-NATIVE", "PackageManager>>>sign: %s", v37);
a1->functions->DeleteLocalRef((JNIEnv *)a1, v33);
var10 = strcmp(v38, "846BB6E12205A3245D1E78C934EDA27EA02D5BD5");
operator delete[](v38);
if ( var10 )
{
v48 = "sign_check_sha1_error";
LABEL_95:
throwException(a1, v48);
return 0;
}
return 1;
}

对应的汇编代码

.text:00009082 FD F7 FA EF                   BLX             j__ZdaPv                ; operator delete[](void *)
.text:00009082
.text:00009086 00 2C CMP R4, #0
.text:00009088 3F F4 B7 AE BEQ.W loc_8DFA

把这里的CMP R4, #0改为CMP R4, R4,这样下一行就可以顺利跳转

借助反汇编工具https://armconverter.com/

通过010Editor 把这里改为A442即可

'

再次打开APP,运行正常功能正常,成功绕过签名校验

【Android逆向】某小说网站签名破解的更多相关文章

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

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

  2. 初探Android逆向:通过游戏APP破解引发的安全思考

    如今移动互联网已经完全融入到我们的生活中,各类APP也是层出不穷,因此对于安卓APP安全的研究也尤为重要.本文通过对一款安卓APP的破解实例,来引出对于APP安全的探讨.(本人纯小白,初次接触安卓逆向 ...

  3. [摘]Android逆向分析常用网站

    androidterm:   Android Terminal Emulator   http://code.google.com/p/androidterm/   droidbox:   Andro ...

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

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

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

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

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

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

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

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

  8. android逆向学习小结--CrackMe_1

    断断续续的总算的把android开发和逆向的这两本书看完了,虽然没有java,和android开发的基础,但总体感觉起来还是比较能接收的,毕竟都是触类旁通的.当然要深入的话还需要对这门语言的细节特性和 ...

  9. 【转】Android逆向入门流程

    原文:https://www.jianshu.com/p/71fb7ccc05ff 0.写在前面 本文是笔者自学笔记,以破解某目标apk的方式进行学习,中间辅以原理性知识,方便面试需求. 参考文章的原 ...

  10. [置顶] Android逆向从未如此简单

    哈,又标题党了..不过我一定竭尽所能,写一篇最亲民的入门文章. 本文仅供学习交流之用,切勿用于非法用途,读者若运用所学知识,进行非法任何商业目的或者非法牟利,一切责任由操作者自行承担,与本人无关.希望 ...

随机推荐

  1. OpenGauss 单机版安装

    OpenGauss 单机版安装 银河麒麟的前置事项 yum -y install libaio-devel flex bison ncurses-devel glibc-devel patch rea ...

  2. [转帖]生产环境 TiDB 集群混合部署实践

    https://tidb.net/book/tidb-monthly/2022/2022-04/usercase/tidb-cluster 一.背景​ 由于各种场外因素导致我们不能自由选择的理想硬件环 ...

  3. [转帖]关于https://goproxy.cn,direct与https://proxy.golang.org的问题,国内无法访问https://proxy.golang.org设置了GOPROXY仍不可行

    关于https://goproxy.cn,direct与https://proxy.golang.org的问题,国内无法访问https://proxy.golang.org设置了GOPROXY仍不可行 ...

  4. [转帖]接口偶尔超时,竟又是JVM停顿的锅!

    https://www.cnblogs.com/codelogs/p/16391159.html 简介# 继上次我们JVM停顿十几秒的问题解决后,我们系统终于稳定了,再也不会无故重启了!这是之前的文章 ...

  5. [翻译]-hugePage的简要说明--部分内容

    hugePage的简要说明 本篇文档的主旨给linux内核支持的大页内存做一个简要的概述. 大页内存的实现是建立在大多数现代架构所都支持的多级页大小的特性之上的. 举例: x86架构下大部署CPU 的 ...

  6. 浅析大促备战过程中出现的fullGc,我们能做什么?

    作者:京东科技 白洋 前言: 背景: 为应对618.双11大促,消费金融侧会根据零售侧大促节奏进行整体系统备战.对核心流量入口承载的系统进行加固优化,排除系统风险,保证大促期间系统稳定. 由于大促期间 ...

  7. es7如何使用await发送请求

    handleLogin() { this.$http.post("login", this.formLabelAlign).then(res => { const { dat ...

  8. 【解决一个小问题】proto文件中的enum,去掉长长的重复的enum名字

    在proto中定义的enum,通常类型名字都会带上enum的前缀,很丑陋,如何去掉呢? enum DataSourceType{ NotUse = 0; MySQL = 1; ElasticSearc ...

  9. vm-storage在全部都是新metric情况下的写入性能测试

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 vm-storage中,写入索引的性能要比写入data p ...

  10. net core部署iis执行此操作时出错web.config

    页面访问会报服务器内部错误,你点对应的IIS下的默认页面或模块会出现下面的错语. 请到官网下载对应的运行时:https://www.microsoft.com/net/download 如果是服务器, ...