0%

混淆没解全靠猜 真解不动混淆了。 拿地图信息 第一步:找驱动基址(绕过 DKOM 摘链) 驱动摘掉了自己的链表(lm m ShadowGateSys 返回空),所以不能用常规模块枚举找基址,改走设备对象反查: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748491: kd> !object \Device\ShadowGateObject: ffffc68c1eb4e6a0 Type: (ffffc68c19cb1400) Device ObjectHeader:...

阅读全文 »

Balabala: 和2021-2022版本的加固很像,除了没有反调试基本思路是一样的。 展示: 了解目标、确定方向: 打开游戏,触发示例方块得到样例flag,目标是触发屋顶的方块,得到真正的flag,常规游玩、车是开不到那地方的。 所以第一个目标:传送车的坐标到触发块的坐标。 解包APK发现是Godot引擎制作的游戏,gdc脚本也被加密了,本身对godot不是很熟悉,不过既然是开源的就下载源码下来看看,同时上网搜索发现:Godot官方是支持用脚本加密的。 懒了: https://www.52pojie.cn/thread-2002779-1-1.html ,直接照抄思路dump密钥(脚本末尾...

阅读全文 »

我爱玩碧蓝档案,鏖战了两三天,可以把frida打进去了,平心而论我觉得技术含量还是非常高的,对抗强度最高的一次,学到的非常多,这里记录一下。 起点 和之前il2cpp分析的一样,要想拿到静态的资源表、结构体、函数签名之类的,就需要通过il2cpp中的meta_init,il2cpp dump的原理就是这样,meta_init需要通过global-metadata.dat来获取全局的字符串信息,然后把C#转译出来的Cpp跑起来,这个转移出来的CPP本身就有一定的混淆效果,像是写代码时用到的字符串之类的信息都会被转储到global-metadata.dat中。(这一段准备工作,网上有大量的资料和工...

阅读全文 »

预热 先读开源的检测方案:DetectFrida,源码我肯定是没看完就上手改frida去测了,搞到最后发现这个检测app把socket权限给ban了,没法create socket就暂时放弃了爆改Frida通讯的方案,要自己去写的话,真的十分费劲。 先读Frida的实现:frida-agent、frida-gadget注入目标进程后,自己通过g_thread_new(在gthread.h头文件中)分别去创建几个线程:gum-js-loop、frida-main-loop、frida-gadget,名字硬编码在源代码里面的,以及两个依赖库所创建的线程:gmain、gdbus(来自GLib内部)。...

阅读全文 »

前言: BlueArchive是一款二次元游戏,最初的想法是试试看安卓逆向怎么玩,直到遇到上libtprt,艰难重重终于克服,在此前:对别人的修改做法也比较感兴趣,就花了点小钱入手一份样本来试试看。 作者还是有点实力的,感觉比较好笑随即打算写一篇样本分析。 分析: 打开第一眼,就是两个大大的问候,java层就没啥必要看了,也比较简陋,这种核心功能肯定是封装在native层里面去对其他进程做手脚。 打开IDA看一眼,存在着大概三种混淆: 花指令跳转混淆: 控制流平坦化混淆: 还有些比较奇怪的跳转混淆什么的。 太多了混淆了,注定没法一眼丁真,那就跟着特征去追吧:跟着关键字符串“BlueArchiv...

阅读全文 »

从简到难写一下Unity手游作弊思路,当作一个学习记录。 前置知识:Unity C#开发、il2cpp封装层。 为了开发效率和程序员的身心健康,Unity引擎游戏是使用C#脚本语言来写的,而要运行编译封装出来的C#程序,一般都要求.NET SDK的环境。这个对于用户来说就不太方便,想要开箱即用、点击即玩,Unity就提供了两种办法来解决:Mono、il2cp。 从简单的Mono开始: 这是一个开源的.NET框架实现,使得C#应用能够跨平台运行,相当于用户下载游戏的时候就提供了一个运行环境,如下所示: 其中Assembly-CSharp包含了开发者在Unity引擎中写的C#逻辑代码,通过 dns...

阅读全文 »

随便记一点学习的内容,凭感觉写的可能有误,主要是懂个大概就行,一时半会也摸不到内核里面的操作,还是使用各种框架、工具的脚本小子。 开始的想法 首先想要通过外部调试安卓应用:frida、xposed这种工具够用,一般是通过jadx或者是别的il2cppdump获取到应用运行时的类,然后进行插桩、hook、查看函数调用链、篡改程序执行行为这些,感觉能找到关键类在哪里就够用。 所以了解要怎么找到对应的函数、以及这两个工具的运行原理就变得重要。下面一点一点来。 两个工具的原理、区别 Frida Frida是通过进程注入:ptrace系统调用或者其他注入技术,将Frida的引擎注入到目标进程中,提供修改...

阅读全文 »

大致内容: C#中的异步、同步、委托、事件、回调的一些用例,也算不上什么高级的开发技巧,熟练使用的话开发能减少不少的工作量。当然除了C#以外、其他语言的思想大致也是这样。 异步、同步 在一定有限的时间里,可能要执行一些无法估计时间的代码,比如网络任务、UI加载等,但由于这部分任务会占用主线程一定的时间,这段时间里用户可能就面对的是一个无响应的界面(因为相关进程都被卡死了,都在等这部分任务的执行)。这时候一个很自然而然的想法就应运而生:有没有办法,让这部分任务在后台进行,得到结果后再传入用户的UI界面?这个 分开任务执行流程 ,最后 再并入主线程 的办法就叫 异步。 通俗来讲就是:在一定的时间(...

阅读全文 »

积累了半年的Unity开发经验,写下自己对游戏程序"快速"开发的见解,主要是面向2D游戏、UI制作、游戏后端数据处理的一些思考。 游戏开发和传统的Web前后端有些不同,但是又大同小异的,做好UI、传递数据、中间层处理信息、后端接受存储、再返回前端,大概都是这个流程。 所以写UI啊、角色信息、接口设计啥的,大体就有了一些经验,因为是个人的思考总结、也并非什么教程理论,就随便写得通俗一点。 本篇文章的大纲如下: 游戏项目管理、维护、推进、合作开发 游戏UI制作、代码管理、UI数据处理 后端数据保存读取等(美术资源、数据库等) 游戏项目管理: 一个简单的例子:Unity里当然可以...

阅读全文 »

测试中… FX(x)={exp⁡(−exp⁡(−z(x)))if ξ=0exp⁡(−(1+ξz(x))−1/ξ)if ξ≠0F_{X}\left(x\right)=\left\{\begin{array}{cl} \exp\Bigl(-\exp(-z(x))\Bigr) & \text{if } ~ \xi=0 \\\\\exp\Bigl(-(1+\xi z(x))^{-1/\xi}\Bigr) & \text{if } ~ \xi \neq 0\end{array} \right.\\\\ FX​(x)=⎩⎪⎪⎪⎨⎪⎪⎪⎧​exp(−exp(−z(x)))exp(−(1+ξz...

阅读全文 »