付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理安全10大目标
- 有限空间作业安全专项施工方案
- 食堂设备巡检记录考核标准
- 手术室感染的试题及答案
- 卫生院院长年度工作总结报告撰写要点
- 加油加气站应急预案
- 井工煤矿操作员运行操作安全操作规程
- 健康课程小班教案
- 地下矿山车工检修维修安全操作规程
- 四川省内江市2026年中考数学试题附同步解析
- 2026年北京市中考英语试卷真题(含答案及解析)
- 2026 年注塑车间主管上半年述职报告
- 安徽九华山旅游发展股份有限公司招聘笔试真题2025
- 2026年安徽省淮北市辅警考试试题解析及答案
- 【新教材】人教版(2024)八年级下册物理期末检测试卷 3套(含答案)
- 2026上海博物馆公开招聘12名工作人员备考题库及参考答案详解
- 2026年山东定期医师考核题库及答案
- 骨关节炎阶梯治疗专家共识(2026版)
- 《工业管道安全技术规程》(TSG31-2025)监督检验规则培训
- 小学6年级暑假每日学习打卡表(可直接打印使用)
- 2026年山东聊城市社区工作者考试试题解析及答案
评论
0/150
提交评论