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. 血缘关系分析工具SQLFLOW--实践指南

    SQLFlow 是用于追溯数据血缘关系的工具,它自诞生以来以帮助成千上万的工程师即用户解决了困扰许久的数据血缘梳理工作. 数据库中视图(View)的数据来自表(Table)或其他视图,视图中字段(Co ...

  2. 端到端TVM编译器(下)

    端到端TVM编译器(下) 4.3 Tensorization DL工作负载具有很高的运算强度,通常可以分解为张量运算符,如矩阵乘法或一维卷积.这些自然分解导致了最近的添加张量计算原语.这些新的原语带来 ...

  3. Docker基本原理概述

    Docker基本原理概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,可以以与管理应用程序相同的方式来管 ...

  4. TVM虚拟机配置

    TVM虚拟机配置 目录 3.1. Supported Guest Operating Systems 3.1.1. Mac OS X Guests 3.1.2. 64-bit Guests 3.2. ...

  5. 那些年,我们一起做过的KNX智能化控制经典案例!

    那些年,我们一起做过的KNX经典案例! 光阴之箭已经穿越年轮,抵达2021 GVS在2008年加入KNX国际协会,成为中国首批引进KNX标准的企业,此后,还率先研发出基于KNX的核心协议栈,定标准,做 ...

  6. springmvc——自定义类型转换器

    一.什么是springmvc类型转换器? 在我们的ssm框架中,前端传递过来的参数都是字符串,在controller层接收参数的时候springmvc能够帮我们将大部分字符串类型的参数自动转换为我们指 ...

  7. 『居善地』接口测试 — 12、Moco框架介绍

    目录 1.Mock功能介绍 2.Moco框架介绍 3.Moco框架在接口测试中的作用 4.Moco框架的优点 5.Moco框架的下载与启动 (1)Moco框架的下载 (2)Moco框架的启动 1.Mo ...

  8. 【creo】CREO5.0+VS2019配置(还没写完)

    欢迎大家一起学习使用c++对CREO5.0二次开发. 第1步,建立开发目录:在E盘(或者其他盘)新建creo_cpp文件夹,文件夹中新建ABC_TOOLS用来存放我们开发的工具,CODE文件夹存放开发 ...

  9. Perm 排列计数

    题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很 ...

  10. 【题解】[LuoguP3503]「BZOJ2086」[POI2010] Blocks

    题目描述 给出N个正整数a[1..N],再给出一个正整数k,现在可以进行如下操作:每次选择一个大于k的正整数a[i],将a[i]减去1,选择a[i-1]或a[i+1]中的一个加上1.经过一定次数的操作 ...