记录Android下的加固以及逆向技术

刚重新看了下hikari的string encryption pass,大概是这个流程
1,扫描function里所有inst的operand,判断是不是constexpr,如果是,将常量表达式退化成指令序列
2,经过1处理,函数所有引用的global variable都会是某个inst的直接operand,所以扫描function里所有inst的operand,判断是不是globalvariable,如果2结果是gv,创建加密拷贝,并替换operand。
3,函数入口插入一个basicblock,插入解密代码,解密1、2处理的所有gv。

 

而Armariris和xse都是直接迭代访问module::global_iterator直接处理所有全局常量的。缺乏hikari的局部化处理能力。二是,hikari对多种类型的常量都具备处理能力。
总体上hikari的string encryption更好一些。流程比较清晰,覆盖场景也比较广。


 

首先下载一个obfuscator-llvm
https://github.com/obfuscator-llvm/obfuscator

 

再下载一个ollvm的分支版本Hikari
https://github.com/HikariObfuscator/Hikari

 

再下载一个ollvm的分支版本Armariris
https://github.com/GoSSIP-SJTU/Armariris

 

再下载一个ollvm的分支版本
https://github.com/yag00/obfuscator

 

yag00的版本实现了字符串加密,xse pass,不过稳定性一般,明显测试的不多,corner case处理的不好。可以参考,但不抄它,要是看不懂就忽略这个版本。
Armariris的字符串加密功能略好一点点,不用看了直接抄袭。Hikari的anti class dump做的很有特色,闭着眼睛抄就行。另外Hikari的anti hooking、anti debugging功能有,但是不带prebuilt ir,没法直接抄。我们先关注下这个仓库,等他开源了prebuilt,再继续抄。

 

ollvm自己的bogus control flow做的不太好,谓词都是浮点运算,比较明显可辨,但是没办法,我们又不会写自己的。

 

酌情考虑,control flow flattening、bogus control flow、binary operator subsitition抄ollvm的,字符串加密抄Armariris的,anti class dump抄Hikari的,Hikari的IndirectBranch也可以抄来,做的也很有特色。

 

最后,把这锅粥用cmake生成sln,运气好了,vs直接编过,就可以在看雪上发布作品了。因为做的跟屎一样,就叫他 shit llvm 吧,简称sllvm。

 

写代码是不可能的了,这辈子都不可能写代码了,编译原理又不会,c++11也看不懂,只有上github抄袭才可以维持得了生活这个样子。github上人又好,代码写的又好,个个都是人才,我超喜欢在里面的!

so加固篇:

so混淆

Android NDK混淆 - 简书

交大孤挺花字符串混淆

GitHub - GoSSIP-SJTU/Armariris: 孤挺花(Armariris) -- 由上海交通大学密码与计算机安全实验室维护的LLVM混淆框架

手动注册native函数

注册JNI函数的两种方式 - 巫山老妖 - CSDN博客

Android so库文件的区节section修复代码分析

Android so库文件的区节section修复代码分析 - Fly20141201. 的专栏 - CSDN博客

so hook篇:

修改版本cydia substrate

GitHub - freakishfox/SNativeHook: 修改版substrate Hook,使用源码编译成静态库

爱奇艺 native PLT hook | xHook

GitHub - iqiyi/xHook: ? A PLT hook library for Android native ELF (executable and shared libraries). Support Android 4.0+. Support armeabi-v7a, arm64-v8a, x86, x86_64.

java hook篇:

xposed框架下载

Index of /framework/

C# hook篇:

DotNetDetour是一个用于.net方法hook的类库

GitHub - bigbaldy1128/DotNetDetour

注入篇:

xopsed注入substrate进行hook自身,好处是xposed会一直更新,理论兼容性很强.

基于Xposed和Substrate的通用性SO注入 - 大星星的专栏 - CSDN博客

非常好的一篇文章Unity下注入DLL思路

Unity下的注入与修改 | Perfare's Blog

逆向工具mac:

本软件集成了Android开发中常见的一些编译/反编译工具,方便用户对Apk进行逆向分析,提供Apk信息查看功能.目前主要功能包括(详细使用方法见使用说明):

GitHub - Jermic/Android-Crack-Tool: ?Android crack tool For Mac

Unicorn Engine:

[原创]使用Unicorn Engine分析so-『Android安全』-看雪安全论坛 

[原创] Unicorn 在 Android 的应用-『Android安全』-看雪安全论坛

smali baksmali smaliidea:

JesusFreke / smali / Downloads — Bitbucket

OLLVM加固应用

hikari学习笔记(一) - 简书 包括Xcode配置ollvm,unity进行混淆6.0 8.0均编译不过不知为何,7.0通过

自己动手实现基于llvm的字符串加密 - Essence Sharing | 干货分享 - iOSRE一些问题记录

xcode报错⚠️clang (LLVM option parsing): for the -enable-strcry option: may only occur zero or one times!https://blog.csdn.net/SysProgram/article/details/81462342 删除$(inherited)

XCode9之后要设置Enable Index-While-Building成NO

Bitcode设置为NO

编译脚本:

git clone --recursive -b release_80 https://github.com/HikariObfuscator/Hikari.git Hikari && cd Hikari && git submodule update --remote --recursive && cd ../ && mkdir Build && cd Build && cmake -G "Ninja" -DLLDB_CODESIGN_IDENTITY='' -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_APPEND_VC_REV=on -DLLVM_CREATE_XCODE_TOOLCHAIN=on -DCMAKE_INSTALL_PREFIX=~/Library/Developer/ ../Hikari && ninja &&ninja install-xcode-toolchain && git clone https://github.com/HikariObfuscator/Resources.git ~/Hikari && rsync -a --ignore-existing /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/ ~/Library/Developer/Toolchains/Hikari.xctoolchain/ && rm ~/Library/Developer/Toolchains/Hikari.xctoolchain/ToolchainInfo.plist

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值