1. 打开jadx,就发现了我们的老朋友数字壳

  2. 典型的类抽取壳,直接上fart脱就完事了,我这里使用的是fart的frida脚本,省去了刷机的步骤

    这里的脱壳脚本,自行去github的寒冰大佬那边clone 一份下来,注意一点,就是fart.so和fart64.so copy在/data/local/tmp

    下,或者sdcard下,直接拷到/data/data下面,没权限,所以先做个过渡,先把文件放到我们能控制的地方,再adb shell进入机子,su切换成root,再cp过去

  3. 筛选出dex

  4. jadx打开dex,查看逻辑



    native的函数对我们传入的字符串进行校验,ida直接安排上

  5. 发现是静态注册,继续跟进去



    发现函数都被加了ollvm,不过混淆的强度不是很高



    耐心的看分发变量的取值,跟着逻辑走一遍,还是可以看出执行流程的,直接跟进核心逻辑



这里也可以和上面一样慢慢跟,但是有快的方法,这里想到是直接在每个函数中加个log,这样的话,当每次执行的

时候,log也会根据执行顺序打印出来。

7.



8. 因为写之前已经知道,考点是常用的加解密算法,所以我直接把参数和返回值dump出来看看



没法全部截图出来,这里也主要是记录下思路,发现返回值最后有两个等号,很有可能是base64,自己

本地解密后,和传入的参数比较,发现就是base64加密

9.发现这个函数,返回值都是16字节,说明是个哈希算法,盲猜md5,sha1之类



用fincrypt搜下常量,并没有搜到关于哈希的东西



反而是搜到aes,查看了下引用,发现就是在上面sub_D7EC函数中

10.怀疑是把常量嵌入到汇编中了,所以直接ida文本搜索下



这里我ida抽风了,之前可以搜到,刚刚又搜不到,但是查看引用,实锤了那个函数就是md5

11.基本逻辑差不多就捋清楚了,先经过md5加密,然后base64,然后aes,然后base64

至于密文,直接hook libc中的strcmp函数,把参数dump出来就好了,但是注意这个是系统的api,hook的话,

会有很多app调用这个函数,所以手法就是在hook最后一个执行函数后,再进行hook,这样就不会又那么多的

干扰

12.放下我hook脚本



function hookStrcmp()
{
var libcmodule=Process.findModuleByName("libc.so");
var strcmp_addr=libcmodule.findExportByName("strcmp");
Interceptor.attach(strcmp_addr,{
onEnter:function(args){
console.log("strcmp_addr_args[0]->",hexdump(args[0]));
console.log("strcmp_addr_args[1]->",hexdump(args[1])); },onLeave:function(retval)
{
console.log("strcmp_addr_retval->",retval);
}
})
} function main()
{
/*
sub_428BC(*(_DWORD *)(v9 - 8), v32);
sub_42888(v10);
sub_8748(v32, 16);
sub_D7EC(&unk_540C5, *v33); // 第二块的代码
strcmp(*v34, *v37);
*/
var libnativemodule=Process.findModuleByName("libnative-lib.so");
var libnativebaseadd=Module.findBaseAddress("libnative-lib.so");
var testjni=libnativemodule.findExportByName("Java_com_kanxue_test2_MainActivity_jnitest");
var sub_428BC=libnativebaseadd.add(0x428BC).add(0x1);
Interceptor.attach(sub_428BC,{
onEnter:function(args){
console.log("get into sub428BC:arg0->",hexdump(args[0]));
console.log("get into sub428BC:arg1->",hexdump(args[1])); },onLeave:function(retval)
{
console.log("end into sub428BC:retval->");
}
});
var sub_42888=libnativebaseadd.add(0x42888).add(0x1);
Interceptor.attach(sub_42888,{
onEnter:function(args){
console.log("get into sub42888:arg0->"); },onLeave:function(retval)
{
console.log("end into sub42888:retval->");
}
});
var sub_8748=libnativebaseadd.add(0x8748).add(0x1);
Interceptor.attach(sub_8748,{
onEnter:function(args){
console.log("get into sub_8748:arg0->",hexdump(args[0]));
console.log("get into sub_8748:arg1->",16);
},onLeave:function(retval)
{
console.log("end into sub_8748:retval->",hexdump(retval));
}
});
var sub_D7EC=libnativebaseadd.add(0xD7EC).add(0x1);
Interceptor.attach(sub_D7EC,{
onEnter:function(args){
console.log("get into sub_D7EC:arg0->",hexdump(args[0]));
console.log("get into sub_D7EC:arg1->",hexdump(args[1]));
},onLeave:function(retval)
{
console.log("end into sub_D7EC:retval->",hexdump(retval));
hookStrcmp();
}
});
}

ollvm混淆的某apk题目的逆向分析的更多相关文章

  1. Android应用安全防护和逆向分析 ——apk反编译

    概述 最近一直在学习Android应用安全相关和逆向分析的知识.现在移动app在安全方面是越来越重视了,特别是那些巨头企业涉及到钱的应用,那加密程度,简直是丧心病狂,密密麻麻.从这里可以看出,对于应用 ...

  2. Android逆向分析(2) APK的打包与安装背后的故事

    前言 上一次我们反编译了手Q,并遇到了Apktool反编译直接crash的问题,虽然笔者很想在这次解决这个问题,但在解决途中,发现该保护依赖于很多知识,所以本次先插入一下,正所谓知其然知其所以然,授之 ...

  3. Android逆向分析(2) APK的打包与安装

    http://blog.zhaiyifan.cn/2016/02/13/android-reverse-2/ 2/18日增加对aidl和java编译的描述. 前言 上一次我们反编译了手Q,并遇到了Ap ...

  4. Android Studio(十一):代码混淆及打包apk

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  5. 一文了解安卓APP逆向分析与保护机制

    "知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...

  6. 20145307陈俊达_安卓逆向分析_dex2jar&jd-gui的使用

    20145307陈俊达_安卓逆向分析_dex2jar&jd-gui的使用 引言 这次免考选择了四个项目,难度也是从简到难,最开始先写一个工具的使用 想要开发安卓首先要会编写代码,但是想要逆向分 ...

  7. [Android Security] Smali和逆向分析

    copy : https://blog.csdn.net/u012573920/article/details/44034397 1.Smali简介 Smali是Dalvik的寄存器语言,它与Java ...

  8. 20145307陈俊达_安卓逆向分析_Xposed的hook技术研究

    20145307陈俊达_安卓逆向分析_Xposed的hook技术研究 引言 其实这份我早就想写了,xposed这个东西我在安卓SDK 4.4.4的时候就在玩了,root后安装架构,起初是为了实现一些屌 ...

  9. 20145307陈俊达_安卓逆向分析_APKtools分析smail

    20145307陈俊达_安卓逆向分析_APKtools分析smail 引言 真刺激呢!到了第二篇博客了,难度开始加大,之前是简单的dex2jar和有图形界面的jd-gui,现在来隆重介绍强大的反汇编工 ...

随机推荐

  1. 【Java】Files.readAllBytes(Path) 遇见的坑

    Files.readAllBytes(Path)方法把整个文件读入内存,此方法返回一个字节数组,还可以把结果传递给String的构造器,以便创建字符串输出. 在针对大文件的读取的时候,可能会出现内存不 ...

  2. 安装篇--xshell评估过期解决方法

    打开XSHELL6(以自身版本为准,没有版本限制),弹出如上提示框,解决如下: 1.点击取消,不用卸载原来的,直接进入官网下载安装免费授权的https://www.netsarang.com/ 2.点 ...

  3. 3D Cube计算引擎加速运算

    3D Cube计算引擎加速运算 华为达芬奇架构的AI芯片Ascend910,同时与之配套的新一代AI开源计算框架MindSpore. 为什么要做达芬奇架构? AI将作为一项通用技术极大地提高生产力,改 ...

  4. 面试官就是要问我SpringMVC的源码,差点顶不住!

    <对线面试官>系列目前已经连载22篇啦!有深度风趣的系列! [对线面试官]Java注解 [对线面试官]Java泛型 [对线面试官] Java NIO [对线面试官]Java反射 & ...

  5. python pyyaml操作yaml配置文件

    在测试工作中,可以使用yaml编写测试用例,执行测试用例时直接获取yaml中的用例数据进行测试(如:接口自动化测试) 1.什么是yaml 是一种可读的数据序列化语言,通常用于配置文件 非常简洁和强大, ...

  6. 三、Nginx设置用户认证

    要求:通过nginx服务端配置实现以下目标 访问web页面需要进行用户认证. 用户名为:tom,密码:123456 操作步骤, 更改配置文件 [root@client ~]# vim /usr/loc ...

  7. 配置NFS共享, Linux与Linux的共享

    • Network File System,网络文件系统 – 用途:为客户机提供共享使用的文件夹 – 协议:NFS(TCP/UDP 2049).RPC(TCP/UDP 111) 只读的NFS共享 服务 ...

  8. MySQL零散知识点(02)

    存储过程 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql,类似于python中的自定义函数 基本使用 delimiter $$ crea ...

  9. Java程序安装失败

      检查文件路径,应该不含中文汉字,空格以及特殊字符.应将jdk的安装目录设置为纯英文路径. 是否有多个安装程序同时运行,若多点安装程序则会安装失败,打开任务管理器,查看是否有多个安装程序运行 注册表 ...

  10. 使用 flux2+kustomize+helm+github 进行多集群 GitOps 云原生渐进式交付

    对于此示例,我们假设有两个集群的场景:暂存(staging)和生产(production). 最终目标是利用 Flux 和 Kustomize 来管理两个集群,同时最大限度地减少重复声明. 我们将配置 ...