1.Obfuscator-llvm源码分析
2.IL2CPP 逆向初探
3.5年资深Android开发,源码转行逆向开发该如何学习?
4.怎么反编译
5.小程序逆向分析 (一)
6.虚幻4(ue4)引擎加密pak解包教程(初学者向x64源码逆向)
Obfuscator-llvm源码分析
在逆向分析中,分析Obfuscator-llvm是源码一个备受关注的工具,它通过混淆前端语言生成的分析中间代码来增强SO文件的安全性。本文主要讲解了Obfuscator-llvm的源码三个核心pass——BogusControlFlow、Flattening和Instruction Substitution,分析dwg 安卓源码它们在O-llvm-3.6.1版本中的源码实现。
BogusControlFlow通过添加虚假控制流和垃圾指令来混淆函数,分析其runOnFunction函数会检查特定参数,源码如混淆次数和基本块混淆概率。分析在测试代码中,源码它会将基本块一分为二,分析插入随机指令,源码形成条件跳转,分析如“1.0 == 1.0”条件下的源码真跳转和假跳转。
Flattening通过添加switch-case语句使函数结构扁平化,runOnFunction会检查启动标志。在示例代码中,它将基本块分隔,创建switch结构,并根据随机值跳转到不同case,使函数执行流程变得复杂。
Instruction Substitution负责替换特定指令,runOnFunction会检测启动命令,遍历所有指令并随机应用替换策略,如Add指令的多种可能替换方式。
虽然O-llvm提供了一定程度的混淆,但仍有改进空间,比如增加更多的替换规则和更复杂的跳转策略。作者建议,利用O-llvm的网上购物的源码开源特性,开发者可以根据需求自定义混淆方法,提高混淆的复杂性和逆向难度。
最后,对于对Obfuscator-llvm感兴趣的读者,可以参考《ollvm的混淆反混淆和定制修改》的文章进一步学习。网易云安全提供的应用加固服务提供了试用机会,对于保护软件安全具有实际价值。
更多关于软件安全和源码分析的内容,欢迎访问网易云社区。
IL2CPP 逆向初探
IL2CPP 逆向分析涉及将游戏C#代码转换为C++并编译为Native代码,同时保持C#特性如GC和反射的实现。核心文件global-metadata.dat存储了类名、方法名等信息,启动时会读取。逆向过程包括解压apk,使用IL2CPPDumper获取符号,寻找libil2cpp.so和global-metadata.dat,以及利用dump.cs、IL2cpp.h和script/json/stringliteral.json等工具解析代码。
详细步骤如下:
1. 获取Android(armeabi-v8a\libil2cpp.so)和PC(_Data/il2cpp_data/Metadata/global-metadata.dat)的il2cpp相关文件。
2. 利用IL2CPPDumper工具处理global-metadata.dat,dump.cs显示C#类、方法等信息,IL2cpp.h提供cpp头文件,script.json和stringliteral.json则为类方法和字符串的json展示。
3. 在IDA中,根据元数据加载路径(il2cpp_init、il2cpp::vm::Runtime::Init等函数),分析混淆情况,寻找可能的打卡赚佣金源码解密或混淆点。
4. 对于混淆的metadata,尝试内存搜索魔术字,或对比源代码找到解密代码区域。
5. 解密后的关键函数,如ScoreScene__Start,通过检测preciseTime和notehit来获取flag。
示例中提到的解密和逆向技术包括:
- 搜索内存中的魔术字
- 对比源代码找出MetadataLoader的调用链
- 检测AES加密,确定密钥和IV
- 编写解密脚本恢复数据
参考资源:
- [Blog post 1] katyscode.wordpress.com
- [Blog post 2] cloud.tencent.com
- [Blog post 3] blog.shi.cn
- [Blog post 4] blog.csdn.net
- [Video tutorial] bilibili.com/video/BV1D...
完整示例代码或详细步骤的出处:[Original article - IL2CPP Reverse Engineering - KanXue.com]
5年资深Android开发,转行逆向开发该如何学习?
安卓逆向是什么?它是指通过反编译和源码分析来理解已打包APP实现逻辑的技术。想象APK文件为加密后的压缩包,逆向旨在尽可能还原其原始源码。此过程涉及解密、反编译和解压缩技术。%还原源码几乎不可能,实际应用中,分析部分源码和逻辑,修改后与原始APK打包,即可获得实现特定目的的APP。
安卓逆向技术能够实现多种功能,具体应用取决于分析目的。一线大厂的逆向专家整理的学习资料和笔记,提供了一个学习路径。学习路线图包括八大板块,涵盖了资料、笔记、学习路径的详细内容,供有兴趣者参考。
学习安卓逆向需要具备一定的Android开发经验。这一技术涵盖范围广泛且内容冗杂,对于零基础者挑战巨大。红迅框架源码建议先从基础编程和开发入手,至少要能够理解汇编语言。对于学习安卓逆向,应侧重实用性和工作需求,涉及汇编语言、Android开发、逆向分析工具、调试工具、SO和Java层hook、Linux、Android底层运行机制以及脱壳等知识。
学习安卓逆向旨在提高就业竞争力。在学习过程中,应聚焦工作实用性,掌握汇编语言、Android开发、逆向分析工具、调试工具、SO和Java层hook、Linux、Android底层运行机制、脱壳等相关技术。这一过程需要时间、耐心和实践,以适应快速变化的技术环境。
怎么反编译
反编译是指通过逆向分析源代码或二进制代码,来理解或还原出原始程序设计的思想或算法。
以下是一些反编译的基本步骤:
1.了解目标语言:了解目标语言的语法、数据类型、控制结构、变量等等。裂变伪群源码
2.分析源代码:阅读源代码并理解其中的思想。可以使用调试器、打印语句等方式来辅助理解。
3.生成反汇编文件:将源代码翻译成汇编语言并保存为反汇编文件。这样就可以通过反汇编工具来分析程序的结构了。
4.分析反汇编文件:阅读反汇编文件并理清其中的指令,从而还原出原始程序的设计思想。这需要一定的计算机知识和经验。
5.还原出原始程序:根据反汇编文件中的指令,逐步还原出原始程序的思想和算法。这需要深入的理解计算机系统和编程思想的人才能够做到。
值得注意的是,反编译存在一定的风险,如果不得当可能会导致漏洞被暴露或者破坏系统稳定性等问题,因此应该在合法合规的范围内进行相应的操作。
小程序逆向分析 (一)
李老板:奋飞呀,最近耍小程序的比较多,而且貌似js好耍一点?要不咱们也试试?
奋飞:你是老板,你说了算喽。
第一次搞小程序,得找个软柿子捏,就找个以前分析过的某段子App的小程序吧。
app下载回来就是apk包,那么小程序在哪里?小程序是一个以wxapkg为后缀的文件,在android手机的/data/data/com.tencent.mm/MicroMsg/用户id/appbrand/pkg/里面找。可是下面一堆数字命令的文件,哪个才是我们要找的某段子App的小程序呢?
两个办法:把所有的小程序都删除,就留一个,那这个文件就是了。或者把某段子App的小程序删除,然后再重装一下。看文件日期,最新的就是了。
wxapkg文件肯定没法直接分析的了,我敢打赌它一定可以反编译出js文件。从github.com/ezshine/wxa...下载他编译好的wxapkg-convertor可执行程序。把wxapkg文件拖到wxapkg-convertor的界面里面可以反编译出js源码出来。我们先试试分析一下这个websign的来历。
首先搜索一下websign字符串,很幸运,看上去就在这个js里面的i(d)函数里。
既然反编译出来了js源码,能否动态调试下,这样分析起来更方便了?答案是可以的,下载微信开发者工具,把刚才反编译的工程导入进来。记得在设置->项目设置中把“不校检合法域名...”这一项勾上。这样代码貌似可以跑起来,我们在i函数下个断点,发下它可以进来了。
我们调试的时候发现它并没有生成websign,t.h_m为空,导致后面没有生成,这个难不倒我们,从抓包结果里面找一个h_m的值,写死一下,就顺利跑出结果了。从js代码里看,i函数里面最后调用了o(n),这么明显的md5,我们来试试,在i函数里面加一个代码。首先在Mac下我们算下结果,然后再调试下这个工程,看看t1Use的值。确认过眼神,就是MD5。
搞个新玩意的时候,先找个软柿子捏,不要一下就想放个大卫星。能反编译,然后再动态调试,那么曙光就在眼前。这个样本运气好,肉眼就可以看出是md5,复杂的js算法,可以考虑PyExecJS、js2py或Node.js来跑。所有的故事都会有结局,只有生活跟你没完。TIP:本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系。本文涉及到的代码项目可以去奋飞的朋友们知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx:fenfei讨论下。无偿领取网络安全入门到进阶学习籽料可点击这个链接:瓜子:零基础学网络安全有什么建议?如何入门?——来自一位年薪W的网工倾情讲解。
虚幻4(ue4)引擎加密pak解包教程(初学者向x源码逆向)
文章总结:看雪论坛作者devseed分享了使用虚幻4(ue4)引擎的x源码逆向进行pak解包的教程,针对非魔改版和未加壳引擎,以ue 4.为例,初学者也能理解。教程从观察源码、定位切入点、分析函数与找到密钥,到最后解包的步骤详细展开,旨在帮助读者理解加密pak文件的解密过程。
步骤1:通过关键字"decrypt"在源码中找到FAES::Key结构,确定了AES-加密。确保游戏版本与源码同步,避免源码修改导致不匹配。
步骤2:在FPakFile::LoadIndex函数中,致命错误的log成为解密关键,通过xdbg定位到"Corrupted index offset in pak file."相关代码。
步骤3:在反汇编中,通过函数参数和编译器优化的特性,尤其是Jump指令,追踪DecryptData函数,找到与加密密钥相关的数据结构。
步骤4:经过调试,确认FPakPlatformFile::GetPakEncryptionKey和FAES::DecryptData的调用,解密密钥即在rcx和r8寄存器中找到,通常为bit的随机数据。
步骤5:使用加密密钥解包pak文件,通过Base转换和UnrealPak.exe工具,配合crypto.json文件,实现pak文件的解密和文件转换。
最后,读者可参考相关链接深入学习,逆向分析技术在游戏安全和开发领域具有实际应用价值。
逆向入门cocos2d游戏逆向分析
深入剖析cocos2d-x游戏逆向分析
cocos2d-x是一个开源的移动2D游戏框架,它底层支持各种平台,核心用c++封装了各种库,外部则提供了lua和c++接口。关键代码可能隐藏在lua脚本中,许多安卓游戏的逻辑也主要在lua脚本里运行。通过官网示意图了解从c++进入lua世界的路径。
探索cocos2d-x的lua虚拟机相关代码,包括CCLuaEngine.h和CCLuaStack.h。在应用结束加载中进入lua虚拟机,具体由applicationDidFinishLaunching函数调用engine->executeScriptFile("main.lua")实现。
在luaLoadBuffer函数中,使用xxtea_decrypt解密了lua脚本,并通过luaL_loadbuffer加载解密后的脚本内容。因此,通过hook这个函数,可以将(char*)content字符dump出来,获取解密后的lua脚本。
然而,luaL_loadbuffer的源码无法直接获取,它位于编译过的库cocos2d-x\external\lua\luajit\prebuilt\android\armeabi-v7a\libluajit.a中。要找到实现细节,需要下载luajit源代码进行深入分析。
总结关键点:
1. 从c++进入lua世界的调用逻辑。
2. 使用xxtea加密算法,sign和key为XXTEA和2dxlua。
3. 无论是否加密,都会调用luaL_loadbuffer函数,通过hook这个函数获取解密后的lua脚本,但需运行游戏一次。
4. cocos2d-x\external\xxtea\xxtea.cpp中有加密解密算法,逻辑清晰,可使用python脚本本地解密或hook获取key、sign或解密后脚本。
实战案例:
以某捕鱼游戏为例,下载apk后内部集成十余款小游戏。通过分析游戏源码,找到luac加密文件,解密key和sign。使用ida打开libqpry_lua.so,定位到AppDelegate::applicationDidFinishLaunching函数,找到加密调用。对比源码,解密后可直接运行游戏。
深入lua脚本分析,如子弹击中鱼的逻辑,直接查找src\views\layer\BulletLayer.luac文件。通过修改相关函数参数,实现特定功能。其他功能逻辑获取源码后易于理解,修改代码后重新加密,实现游戏破解。
思考如何实现cocos2d-x反逆向,从浅至深可采用以下方法:
1. 修改xxtea的key和sign,需分析so文件。
2. 直接修改xxtea算法,增加逆向难度。
3. 更改luajit源码,调整字节码指令顺序或数据读取顺序。
4. 将关键代码封装到其他cpp或so文件,增加解密步骤。
5. 使用ollvm混淆代码,需分析混淆或vm。