付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、过SO签名校验在分析某软件 的时候发现重打包的时候出现闪退现象, 我下意识的怀疑是 签名校验, 下面是分析过程,大家都知道 Java端获得签名的代码如下:PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 64);Signature sign = info.signatures0;从而我就从 smali 代码中搜索 “signatures”, 没找到, 难道猜错了, 看到 有so 文件, 就拖进 IDA 中分析, 然后在ida中搜索 字符串”signatures”有关键字
2、出现, 然后我们跳转到对应的代码处, 发现此程序是通过反射机制来获得签名的,使用 Jni 反射获得签名的 代码如下:int getSignHashCode(JNIEnv *env, jobject context) /Context的类jclass context_clazz = (*env)-GetObjectClass(env, context);/ 得到 getPackageManager 方法的 IDjmethodID methodID_getPackageManager = (*env)-GetMethodID(env, context_clazz,getPackageManager
3、, ()Landroid/content/pm/PackageManager;); / 获得PackageManager对象jobject packageManager = (*env)-CallObjectMethod(env, context,methodID_getPackageManager);/ 获得 PackageManager 类jclass pm_clazz = (*env)-GetObjectClass(env, packageManager);/ 得到 getPackageInfo 方法的 IDjmethodID methodID_pm = (*env)-GetMethod
4、ID(env, pm_clazz, getPackageInfo,(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;);/ 得到 getPackageName 方法的 IDjmethodID methodID_pack = (*env)-GetMethodID(env, context_clazz,getPackageName, ()Ljava/lang/String;); / 获得当前应用的包名jstring application_package = (*env)-CallObjectMethod(env, context,metho
5、dID_pack);const char *str = (*env)-GetStringUTFChars(env, application_package, 0);_android_log_print(ANDROID_LOG_DEBUG, JNI, packageName: %sn, str); / 获得PackageInfojobject packageInfo = (*env)-CallObjectMethod(env, packageManager,methodID_pm, application_package, 64); jclass packageinfo_clazz = (*en
6、v)-GetObjectClass(env, packageInfo);jfieldID fieldID_signatures = (*env)-GetFieldID(env, packageinfo_clazz,signatures, Landroid/content/pm/Signature;);jobjectArray signature_arr = (jobjectArray)(*env)-GetObjectField(env,packageInfo, fieldID_signatures);/Signature数组中取出第一个元素jobject signature = (*env)-
7、GetObjectArrayElement(env, signature_arr, 0);/读signature的hashcodejclass signature_clazz = (*env)-GetObjectClass(env, signature);jmethodID methodID_hashcode = (*env)-GetMethodID(env, signature_clazz,hashCode, ()I);jint hashCode = (*env)-CallIntMethod(env, signature, methodID_hashcode);_android_log_pr
8、int(ANDROID_LOG_DEBUG, JNI, hashcode: %dn, hashCode);return hashCode;是一个简单的校验过程, 这里我本以为很简单的把 0 x23366 地址的代码NOP掉,然后重新打包测试 发现软件会直接发生错误, 看来这样直接NOP 不行, 那么我们就换种思路, 我这边是 直接将 r8中正确的签名值 复制到 r5 中, 我们需要Patch汇编代码进去,可直接修改 getSigns 函数, 首先我们编写一段复制的汇编代码.globl _start.align 2_start:.code 16 PUSH R4-R7,LRmov r2,r0mov r3,r8mov r1,#0loop:ldrb r1,r3strb r1,r2add r2,#1add r3,#1cmp r1,#0bne loopPOP R4-R7,PC然后我们使用 as.exe 来编译这段代码as strcpy.asm -o strcpy.o在使用IDA 反编译 strcpy.o 文件获得 代码的16进制值为 “F0B5021C4346002119781170013201330029F9D1F0BD”然后WinHex 打开lib
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高三毕业生自我鉴定
- 临床脑梗偏瘫、长期卧床病人“防压疮”护理要点
- 重症医学相关精神障碍药物合理使用专家共识
- 七年级上册语文背记手册-文言文
- 2026年橡胶软化剂行业分析报告及未来发展趋势报告
- 2026年随身HiFi播放器行业分析报告及未来发展趋势报告
- 2026年玻璃展示柜行业分析报告及未来发展趋势报告
- 2026年辛酰氯行业分析报告及未来发展趋势报告
- 2026年漆器工艺品行业分析报告及未来发展趋势报告
- 慢性肾小球肾炎(慢性肾炎)患者手册
- 2026年辽宁省二级建造师继续教育复习真题AB卷附答案详解
- 2026年农电工通关题库及参考答案详解【综合题】
- 2026 年山东中考历年英语作文合集十篇
- 2026安徽阜阳市金能投资有限公司工作人员招聘7人笔试模拟试题及答案解析
- 2026年卫生高级职称面审答辩(重症医学科)副高面审经典试题及答案
- 2025年冀人版三年级科学下册全套测试卷新版
- 2026年教案合集2026年春人教版八年级下册英语Unit 1~Unit 8全册教案新版
- 2026年新一轮海洋综合调查海底地形地质生态环境本底
- 2026年统编版小学二年级道德与法治下册(全册)教学设计(附目录)
- 急性缺血性卒中患者早期管理指南(2026版)
- 客运防汛应急预案(3篇)
评论
0/150
提交评论