安卓逆向_19( 二 ) --- APK保护策略【重新签名后安装打开失败 --- 书旗小说.apk、浦发银行.apk的过签名校验【so 文件修改保存】】

From( 书旗小说过签名校验 【 使用 DDMS 分析方法调用流程 】 ):https://www.cnblogs.com/LuLuLuHao/p/12874468.html

签名校验一般步骤:

  • 1. 先查有没有加壳,如果有壳,先脱壳
  • 2. 如果没加壳,则 apk 在不做任何修改的情况下重新签名,然后安装,看能不能打开 app

书旗小说.apk 过签名校验

1、根据启动流程

:https://www.bilibili.com/video/BV1vE411c7Zj?p=62

2、签名三兄弟

( log 插桩方法 分析方法调用流程  ):https://www.bilibili.com/video/BV1vE411c7Zj?p=63

签名三兄弟getPackageManagergetPackageInfo、getPackageName、( signature )

context.getPackageManager().getPackageinfo(context.getPackageName(), 64).signatures[0].hashCode()

视频中是通过搜索签名三兄弟,定位到 smali,然后 log 插桩,ddms 看 log 输出,分析流程。。。

3、根据 ddms 中 log 信息判断

1. 把书旗小说.apk( 下载地址:https://www.wandoujia.com/apps/288203/history_v175 )通过 AndroidKiller 重新签名,然后安装,安装发现闪退。

2. 打开 ddms 看看有什么信息   发现了一个 killProcess 方法

滑动到最后,从下往上看!!! 默认按时间先后顺序列出,最下面的是最新的 log  )

3. 打开 jadx-gui 分析代码,搜索 "KillProcess"  根据 ddms 信息  发现它调用了 com.shuqi.app.ShuqiApplication 包里面的方法   我们跳转到里面去

 4. 他这个逻辑就很清晰了

5. 让这个 handleToken 方法返回 true 即可  我们打开 Androidkiller  修改 smali

加这两行代码

6 .apk 完美运行

4、搜索 application 这个类

一个 APK 只有一个 Application。每个 Apk 运行时都需要有一个 Application对象,Application对象 执行 onCreate方法时APP就开始运行

一般做反调试或者签名校验都会在 入口点(即application),每个 Apk 运行时都需要有一个 Application对象,所以直接搜索 application 这个类

点击进入 ,然后找到 onCreate 方法并查看,可以看到 一个 checkSigAsync 方法,

点击进入 checkSigAsync 方法,可以看到就是进行签名校验的。。。

2022.03.18 新版书旗小说

2022.03.18 最新版的书旗小说 签名校验已经不再 java 层,而是放到了 so 层,

jadx 反编译 书旗小说apk ,然后搜索 signature ,

 

Android 文档:https://developer.android.google.cn/reference/android/content/pm/Signature?hl=en

 

浦发银行 apk 过签名校验 

哔哩哔哩( 浦发银行.apk 签名校验【so 文件修改入口点 和 入口界面 ):
https://www.bilibili.com/video/BV1UE411A7rW?p=64

最新版本有加壳。。。。。。。。。。所以下载老版本 apk

浦发银行apk 下载地址(8.0 版本 ):https://www.wandoujia.com/apps/31675/history_v83

这个签名校验是在 so 层。。。

1. 查壳

下载好 8.0 版本的 apk,首先使用 AndroidKiller 查下有没有加壳

可以看到 8.0 版本的 apk 没有加壳。

2. 根据 入口点  或者 入口页面

入口点 优先于 入口页面 加载和执行。

图示:

定位到入口点 smali 代码,找到 onCreate 函数,查看对应逻辑,当不好分析时,可以转换成java 代码进行分析

提示:AndroidKiller 调用 jd-jui 查看 java 代码出现 "未找到对应的APK源码" 时,说明 jd-jui 无法把 smali 代码转换成 java 代码,这时需要换个工具,例如:jadx-gui、Jeb 等

转换成 java 代码进行分析( 这里使用 jadx-gui 转换 )

这里也看不出什么( 其实 YTSafe 就是要找的 关键点 ),打开 ddms 或者 monitor 看下 log 输出,

查看  Java_com_yitong_safe_YTSafe_native_1init 对应的 java 代码(静态注册)

可以看到就是在 libyt_safe.so 库里面进行的校验

到此,java 层分析结束,下面就是使用 IDA 分析这个 so 库了。。。

使用 IDA  Pro 分析 so

使用 IDA Pro 打开提取到的 libyt_safe.so 文件。

拿到一个 so 库后,首先分析 so 的 "导出函数",

因为 init_array 比 JNI_onLoad 执行的时间更早,所以先看下 init_array 有没有坑。。。

Ctrl + s  打开 段选择 窗口,选择 init_array  点击进入 init_array  对应代码位置

发现 init_array 里面没有什么函数,然后搜索 JNI_onLoad ,发现没有 JNI_onLoad 这个函数,在搜索 java_  开头的函数(即 静态注册的函数),发现有很多静态注册的函数

可以看到 有个函数带 init ,可以点进去看看。点击 ---> ARM 汇编代码 ---> F5 反编译 ,查看伪代码

双击 init_lib 函数,跳转到函数对应位置,可以看到 init_lib 函数调用了 check_app 函数

查看 check_app 代码,发现有个 get_sign 函数,字面意思理解就是  得到签名,

直接把这个函数去掉,或者 nop 掉,不调用这个签名函数。

修改 so 文件,并保存( 34' 45'' )。也可以使用  winhex 打开并修改对应位置。 35' 25''

修改后,替换原来的 so 文件,安装还是闪退,看下 check_app 代码 逻辑,是在 while 循环里面 ,

可以 使用 IDA 动态调试 so ,然后打断点进行分析,

int __fastcall check_app(int a1, int a2)
{int v2; // r5int v3; // r4int v4; // r0int v5; // r0int v6; // r5int v7; // r6unsigned __int8 *v8; // r5char *v9; // r5char *v10; // r6int i; // r3char v12; // r3int v13; // r5int v14; // r6int v15; // r3int v17; // [sp+Ch] [bp-44h]int v18; // [sp+10h] [bp-40h]unsigned __int8 *v19; // [sp+14h] [bp-3Ch]int v20; // [sp+18h] [bp-38h]_BYTE *v21; // [sp+1Ch] [bp-34h]int v22; // [sp+20h] [bp-30h]int v23; // [sp+24h] [bp-2Ch]int v24; // [sp+28h] [bp-28h]unsigned __int8 *v25; // [sp+30h] [bp-20h]v2 = a2;v3 = a1;v4 = (*(int (**)(void))(*(_DWORD *)a1 + 668))();v5 = get_sign(v3, v2, v4);v6 = cert_encode(v3, v5);v7 = message_digest(v3, "MD5", v6);v22 = message_digest(v3, "SHA1", v6);v20 = (*(int (__fastcall **)(int, int))(*(_DWORD *)v3 + 684))(v3, v22);v23 = j_malloc(v20);(*(void (__fastcall **)(int, int, _DWORD, int, int))(*(_DWORD *)v3 + 800))(v3, v22, 0, v20, v23);v8 = (unsigned __int8 *)(*(int (__fastcall **)(int, int, _DWORD))(*(_DWORD *)v3 + 736))(v3, v7, 0);v24 = (*(int (__fastcall **)(int, int))(*(_DWORD *)v3 + 684))(v3, v7);inv_mix_key(v8, v24);v25 = (unsigned __int8 *)get_key(v8, v24);(*(void (__fastcall **)(int, int, unsigned __int8 *, _DWORD))(*(_DWORD *)v3 + 768))(v3, v7, v8, 0);v18 = 0;while ( !CHECK_APP ){if ( v18 >= ENC_COUNT )j_exit(0);v9 = &enc_sha1[65 * v18];v17 = j_strlen(v9) / 2;v19 = (unsigned __int8 *)j_malloc(v17);v10 = (char *)j_malloc(3);v10[2] = 0;for ( i = (int)v19; ; i = (int)(v21 + 1) ){v21 = (_BYTE *)i;if ( i - (signed int)v19 >= v17 )break;*v10 = *v9;v12 = v9[1];v9 += 2;v10[1] = v12;*v21 = hex2dec(v10);}j_free(v10);v13 = invCipherAll(v19, v17, v25, v24);j_free(v19);while ( !*(_BYTE *)(v13 + v17 - 1) )--v17;v14 = j_malloc(v17);j_memcpy();v15 = 0;if ( v17 == v20 ){while ( 1 ){if ( v15 >= v20 ){LOBYTE(v15) = 1;goto LABEL_16;}if ( *(unsigned __int8 *)(v14 + v15) != *(unsigned __int8 *)(v23 + v15) )break;++v15;}LOBYTE(v15) = 0;}
LABEL_16:CHECK_APP = v15;++v18;}j___android_log_print(6, "YT_SAFE", &unk_695E);return (*(int (__fastcall **)(int, int, int, _DWORD))(*(_DWORD *)v3 + 768))(v3, v22, v23, 0);
}

在看下 get_sign 函数

点击

函数进入,可以看到和签名相关的函数

方法 2( 搜索字符串 ):

在打开的 Strings window中搜索 getPackageManager、getPackageInfo、signatures。这里以搜索 getPackageManager 为例:

查看 getPackageManager 的调用:

可以看到只在 get_sign 里面调用了 getPackageManager,所以可以判定 get_sign 是关键函数。。。

或者 直接把 check_app 给去掉 。 40' 30''

按教程 上搞到这没搞出来,换思路在搞。。。so 分析流程,ida 修改 so 文件

方法 2:

删除 smali 代码中的  

发现 apk 可以打开显示界面

这里不在截图。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPU、FPGA芯片成为增强机器学习能力的“左膀右臂”

选自:forbes 编译:网易智能 参与:nariiy在商业软件中,电脑芯片已被遗忘。对于商业应用程序来说,这是一种商品。由于机器人技术与个人硬件设备联系更为紧密,因而制造应用程序仍然更侧重于硬件部分。自20世纪…

C++ 第三方常用网络库

From:https://www.cnblogs.com/aitantianderuangutou/p/11416902.html (1) ACE 庞大、复杂,适合大型项目。开源、免费,不依赖第三方库,支持跨平台。 http://www.cs.wustl.edu/~schmidt/ACE.html (2) Asio Asio基于Boost开发的异…

HDU1878-欧拉回路(入门题+并查集)

题意: 判断一个图是否是欧拉回路。 欧拉回路: 图 G 的一个回路,若它通过 G 中每条边一次且仅一次,则称为欧拉回路。 其中有著名的哥尼斯堡七桥问题或一笔画问题。(原来小时候我们就接触欧拉回路了,欧拉回路还是蛮常见,…

增强现实技术的9个最新应用趋势

来源:资本实验室摘要:随着AR技术的成熟,AR与行业的融合越来越深入。从设计到营销,从教育到医疗,从出行到文化,AR正在重新定义各产业的思维方式和运行方式。1.教育AR应用程序正在以更具互动性的方式改变教学…

Linux 系统调用 Ptrace 详解

From:https://blog.csdn.net/u012417380/article/details/60470075 Ptrace 详解:https://www.cnblogs.com/tangr206/articles/3094358.html ptrace运行原理及使用详解:https://blog.csdn.net/edonlii/article/details/8717029 ptrace 函数代…

10年软件开发教会我最重要的10件事[转]

1.面向对象比你想象的要难得多 也许只有我有这种想法,不过我曾经以为计算机科学课上学过的“面向对象”是很简单的东西。我的意思是,创建一些类来模拟现实世界能有多难啊?其实,那还真是挺难的。 十年之后,我仍然在…

安卓系统内 的 安卓虚拟机

转载:虚拟大师,让你的系统再安装一个系统,实现Xposed自由,支持摄像头调用http://xposed.appkg.com/2971.html 虚拟大师 VMOS 虚拟大师简介 虚拟大师是 Android 系统上的 Vmvare,完整的且自带 Root 系统能够让你实现无限…

未来一年最有可能成为独角兽的29家美国初创公司

来源: 资本实验室摘要:近期,研究机构PitchBook梳理出了在未来一年最有可能成为独角兽的29家美国初创公司。资本实验室今日投资关注聚焦前沿科技创新与传统产业升级“小兄弟,老夫看你骨骼清奇,天赋异禀,定是…

StreamWriter类的一般使用方法

理解StreamWriter可以对照StreamReader类来进行,因为他们只是读写的方式不同,一个是读,一个是写,其他的差别不是特别大。 StreamWriter继承于抽象类TextWriter,是用来进行文本文件字符流写的类。 它是按照一种特定的编…

Firefox、Chrome 盘助手

From:https://www.runningcheese.com/baiduyun IDM 下载地址:http://www.ucbug.com/soft/26392.html 定制 Firefox、Chrome 下载地址:https://www.runningcheese.com/ 由网友 "哩呵" 制作的 网盘助手 脚本,需要通过拓…

复杂性理论:科学方法的第三个梯级

来源:人机与认知实验室摘要:莫兰认为系统论超越了还原论,复杂性理论又超越了系统论,它们代表着科学方法论依次达到的三个梯级。复杂性研究从20世纪末叶兴起,目前在国内外已成为许多学科领域内研究的前沿和热点。它涉及…

hdu 1241 Oil Deposits 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid1241 第一次写搜索代码 花了好大的功夫检查 看了别人的结题报告 还是错误一大堆 哎 题目是这样的 表示油田 *表示非油田 与其八个方向组成一片连续油田 一个*组成的图 文有几片油田 思路:没被标记找…

Notepad++ 简单使用

github 下载地址:https://github.com/notepad-plus-plus 简介 Notepad 是 Windows 下的一款免费开源代码编辑器,它使用较少的CPU功率,降低电脑系统能源消耗,但轻巧且执行效率高,使得 Notepad 可完美地取代微软视窗的记…

MIT:机器学习预测2018世界杯冠军

来源 :199IT互联网数据中心摘要:麻省理工学院报道,他们的研究人员开发了一种新型人工智能,用以预测世界杯走势。麻省理工学院报道,他们的研究人员开发了一种新型人工智能,用以预测世界杯走势。研究人员声称…

安卓逆向_20 --- 模拟器检测、反调试检测、ELF动态调试、__libc_init 下断

From( 模拟器检测实战分析 ):https://www.bilibili.com/video/BV1UE411A7rW?p65 怎样过 app 的模拟器检测:https://bbs.pediy.com/thread-249759.htm Android 模拟器如何不被检测思路:https://bbs.pediy.com/thread…

2017-2018中国机器人创新Top100榜单深度分析

来源:产业创新创投数据平台Innov100摘要:人类和机器人由相互隔离、保持距离发展到充分的人机交互,融合共生。一、2017-2018年中国机器人创新Top100榜单二、中国机器人创新Top100数据分析(一)机器人创新Top100产业生态分…

[SCM]源码管理 - perforce快速入门

Perforce是目前比较流行的集中式的源代码管理工具,在很多的欧美跨国公司被广泛的使用。他能够运行于Windows,Linux,Mac几乎所有的平台,支持客户端,命令行,IDE集成,操作系统shell,API…

揭秘:机器究竟是怎么学习的?

来源:雪球摘要:从算法的角度看,机器学习有很多种算法,例如回归算法、基于实例的算法、正则化算法、决策树算法、贝叶斯算法、聚合算法、关联规则学习算法和人工神经网络算法。从算法的角度看,机器学习有很多种算法&…

安卓逆向_21 --- Java层和so层的反调试( IDA 动态调试 JNI_OnLoad、init_array下断)

1. 安卓程序动态调试条件 安卓程序动态调试条件 ( 2个满足1个即可 ): 1. 在 AndroidMainfest.xml ---> application 标签下,设置或者添加属性 android:debuggable"true" 2. 系统默认模式,在 build.prop(boot.img),…

JavaScript MSN 弹出消息框

** 类名:CLASS_MSN_MESSAGE ** 功能:提供类似MSN消息框 ** 示例: ** 作者:ttyp ** 邮件:ttyp21cn.com ** 日期:2005-3-18 ** **/ JS 代码: // JScri…