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. [转帖]GitHub 近两万 Star,无需编码,可一键生成前后端代码,这个开源项目JeecgBoot有点强

    GitHub 近两万 Star,无需编码,可一键生成前后端代码,这个开源项目JeecgBoot有点强 https://www.cnblogs.com/05-hust/p/14515686.html 一 ...

  2. [转帖]Oracle迁移到MySQL时数据类型转换问题

    https://www.cnblogs.com/yeyuzhuanjia/p/17431979.html 最近在做"去O"(去除Oracle数据库)的相关工作,需要将Oracle表 ...

  3. [转帖]性能测试工具netperf安装使用

    https://blog.51cto.com/dingtongxue1990/1853714 netperf工具使用 一.安装 1,下载 liunx下载地址:ftp://ftp.netperf.org ...

  4. 【转帖】MySQL 8.0 hash join有重大缺陷?

    我并不这么看. 友情提醒:本文建议在PC端阅读. 徐春阳老师发文爆MySQL 8.0 hash join有重大缺陷. 文章核心观点如下:多表(比如3个个表)join时,只会简单的把表数据量小的放在前面 ...

  5. [转帖]02-rsync备份方式

    https://developer.aliyun.com/article/885789?spm=a2c6h.24874632.expert-profile.283.7c46cfe9h5DxWK 简介: ...

  6. package.json中^,~的详细说明

    场景描述 在package.json这个文件中,我们经常可以看见这样的信息 但是我们很少注意的是 版本前面的 ^ 到底是什么意思 今天我们就来讲一下(端好小板凳) "dependencies ...

  7. 【小测试】玩一玩 VictoriaMetrics 的 force merge

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 我是期望通过备份来建立 VictoriaMetrics 的 ...

  8. 【JS逆向百例】某音乐网分离式 webpack 非 IIFE 改写实战

    关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途 ...

  9. Ubuntu编译Xilinx的u-boot

    博主这里的是Ubuntu20.04LTS+Vivado2017.4+ZedBoard 注意:本文使用的环境变量导入方法是临时的,只要退出当前终端或者使用其他终端就会失效,出现异常问题,请随时expor ...

  10. C# 中判断List集合是否为空

    判断List集合是否为空,可以使用Count和Any,下面是其使用场景(别人总结)