/logo.png

Focus in crafting 2022

Brute Ratel C4 Keygen

文章发布至看雪《Brute Ratel C4 Keygen》 分析 Brute Ratel C4简称brc4,一款C2工具,功能和CobaltStrike差不多,界面花里胡哨,用了不少开源黑科技,据作者说前段时间被竞争对手Mdsec泄露到VT,然后又被老毛破解了…公布的版本是v1.2.2,给的license文件只支持到2023-01-01,于是打算抽空看看作者是怎么保护的。 先看目录结构: 包只支持linux,可在ubuntu上自测,界面是Qt写的,commander-runme是运行脚本,.brauth是license,brute-ratel-linx64是server,启动会进行license验证。 启动参数:./brute-ratel-linx64 -ratel -a admin -p 123456 -h 127.0.0.1:8443 -sc cert.pem -sk key.pem 先扫一下如图: 可知server是Go写的,正好试下ida 7.7解析metadata,发现没识别到,搜了字符串发现是1.18,ida8.0(https://hex-rays.com/products/ida/news/8_0/)才支持。 后面用了下0xjiayu兄弟的go_parser,正好支持到1.18,问题不大,把符号贴上去后就感觉没什么玩的了。 看了看逻辑: main_main main_product_info stat //判断.brauth文件是否存在 if (flase) main_validate_activation_key //从服务端校验激活key,生成.brauth main_DecryptBlob //关键解密.brauth main_KeyExpansion //密钥扩展128 main_decryptmsg //xAES解密轮函数 xxxAES轮函数: AddRoundKey(10, state, RoundKey); InvShiftRows(state); InvSubBytes(state); for (round = 9; round > 0; --round) { InvShiftRows(state); AddRoundKey(round, state, RoundKey); ShiftRows(state); InvMixColumns(state); InvShiftRows(state); InvSubBytes(state); } MixColumns(state); AddRoundKey(0, state, RoundKey); 开始以为作者留了小动作,上linux_server远程调试确认下密钥扩展的结果,结果只是轮函数简单改了改-。-

聊聊CS4.5的防破解机制

文章已更新到RedKits仓库《聊聊CS4.5的防破解机制》 破解-Crack 关于破解、二开、去特征我并不想写什么,各种文章太多了,我列几篇,自行参考即可: 《CobaltStrike二次开发》 《对Cobalt Strike进行一点二次开发》 《CobaltStrike 4.3 破解 修复暗桩》 《修改1个字节绕过BeaconEye》 补充 CS4.6修复了该BUG:+ Fixed an issue that caused Cobalt Strike’s http listener to be vulnerable when URLs start with “/” as outlined in CVE-2022-23317. 防破解-AntiCrack 其实很多人并不理解破解的核心是什么?核心不在于你绕过了检查license的Java代码,修改是替换class还是agent方式,还是你patch了多少个防破解检测。 关键点在于完整的功能(官方原版)和AES加密的Key,熟悉的人都知道sleeve下面都是加密文件,没有Key就谈不上破解。当然这两个也只有等泄露。 说到这里又想多说几句,现在很多软件完整版都是通过会员通道+license分发(只要你有完整版都难逃破解的命运),像CS这种将核心模块加密再将Key基于公钥算法保护也算一种比较流行的保护方式。所以Cracker现在最难的是拿完整版和key,这个肯定也会泄露出来,只是时间问题。 言归正传,终上所述,CS的防破解技术主要分为三个方面: Authorization校验license sleeve的AES加密 一些防破解检测,俗称暗桩 通过agent的方式破解,可以防止检测文件篡改,参考https://github.com/Twi1ight/CSAgent 当然agent方式会存在诸多开发不便,因此许多人也会修改class来进行二开,这就不得不聊一下4.5的暗桩检测。 4.5的暗桩检测 文件 4.5的原版:https://www.ddosi.org/cobaltstrike-4-5/ 4.5的Key:https://github.com/Twi1ight/CSAgent 暗桩1: isPaddingRequired检测crc,和先前的版本一样 beacon/BeaconC2,BeaconC2函数调用this.data.shouldPad(isPaddingRequired()); 30分钟后,所有任务改为向beacon发退出命令 暗桩2: common/Starter2,initialize函数if (!A(paramClass)) {System.exit(0);} aggressor.dialogs/ConnectDialog和server/Resources均有调用 检测crc,检测不过,直接退出 暗桩3: aggressor/Aggressor,localRuntimeMXBean.getInputArguments(),检测"-javaagent:“参数,这个对修改class无效 common/Starter,同上Starter2,initialize函数if (!A(paramClass)) {System.exit(0);} aggressor/Aggressor、common/Requirements和server/Teamserver均有调用 暗桩4: common/Helper.startHelper函数 检测Starter2.class、ConnectDialog.class、Resources.class的crc aggressor.windows/KeystrokeBrowser、CredentialManager、ScreenshotBrowser均有调用 crc检测不过,直接退出 暗桩5:

KCTF 2022春季赛 第九题 同归于尽

文章发布至看雪《KCTF 2022春季赛 第九题 同归于尽》 OpenArk扫描,32位,这anti得有点过于明显,ida x32分析之。 基本流程 输出 — 阿弥陀佛 输入 — FLAG flag首位必为A,赋值在前,构造0x90数组 开线程,127.0.0.1收发json数据 反分析、校验代码 保护措施 int 2d anti-debug bedebugged anti-debug debug object anti-debug 一堆无用递归浮点,干扰分析 字符串加密 关键代码 根据输出函数,xref找到关键函数,x64dbg调试。 无视一大堆干扰代码,回溯找到关键跳转 SM4加密,key=609CB8FF000000B988000000B8550000 比较加密值,val=553786E89B5D05F55FDC04DDE12A7721 FLAG SM4解密后数据做个变换,ABCDEF01234567890 变换 FE98BA54761032DC5 最终FLAG:AFF7AEFB8AEFF697B6B915FA9818CB16

KCTF 2022春季赛 第四题 飞蛾扑火

文章发布至看雪《KCTF 2022春季赛 第四题 飞蛾扑火》 简单分析 周末饭后,打开网站,查看html源码如下: <img src="url.php?url=https://ctf.pediy.com/upload/team/762/team236762.png"> url.php可以加载网站,换个地址提示"host not allow",很明显用了白名单。 尝试127.0.0.1,提示not found,说明可访问本地,于是用file://配合burp爆破目录,找到file://127.0.0.1/../../../../../etc/passwd。 看了一圈docker信息,pid/uid/status,找到web目录,没找到突破口,后面才看到注释里写了phpinfo.php,眼神不好… 根据phpinfo找到网站目录:/var/www/html,拿到url.php源码,完成第一步。 陷入僵局 源码提示: //echo curl_request("http://123.57.254.42/flag.php","get",[],true,5);//get flag 请求提示error ip,说明得通过ssrf去请求。 现场学习《SSRF-Exploiting-URL》,slide里提示了利用php的parse_url和curl解析不一致来实现绕过。例如:http://@{curl_host}@{php_host}/flag.php,试了几次不行,但又看不到错误。 于是把php包下载下来,开启curl extension,修改代码把curl的错误信息打出来:php.exe test.php,调试输出各种信息,最后确定这个bug已经修复。 尝试绕过伪造IP也不行,暂时陷入僵局… 神秘代码 周末这大好天气不能浪费了,出去逛一圈… ………. ………. ………. 回来后,继续思考: 坚信这个curl一定存在某个神秘bug... 于是从phpinfo拿到curl版本,google搜索神秘代码: curl 7.64.0 parse_url 找到https://hackerone.com/reports/1049624,看来这个版本真存在问题(解析scheme时),本地调试curl 7.64.0 确认解析host通过后,请求服务端拿到flag: url.php?url=123.57.254.42://127.0.0.1/../flag.php flag{xxx_999()xx*@eeEEE}

简单修改两个小朋友APP

临时需求 清明在家,想给小朋友找个简单练习数学运算的APP,老是手写出题不符合我这种现代懒人的气质。搜索一圈,运气不错,先后找了两个比较有用的APP。 第一个APP 数学无尽冒险 版本:v1.7.0 下载地址:https://www.duote.com/android/520153.html 数学无尽冒险游戏是一款依据乘除法为主题的经典跑酷类手游游戏,数学无尽冒险游戏代入感十足给玩家一种舒服的觉得,玩家在拯救自身小伙伴们时必须开展数学难题思索及其突破自我,赶紧来数学无尽冒险畅玩吧,看一下是不是你最聪慧的玩家。 1.每抵达一个特殊的地区的情况下,就会有一些数据,全是一些比较简单的小学算术题,玩家必须迅速的计算回答才可以砥砺前行。 2.数学无尽冒险游戏会给您产生无穷的意外惊喜和开心,能够协助玩家活跃性自身的人的大脑,提升自己的反应能力和沟通能力。 3.卡通形象设计设计方案,好几个副本都给游戏增加了挑战性。 看着不错,一款类似跑酷的小游戏,通过做数学题领奖励,APP本身免费,但是要金币或观看视频才能复活,里面的服务都依托GooglePlay,看样子是个海外应用。 最终目标:我打算改下APP,弄个无限金币复活,因为小朋友玩的话,每次还没做几道题就结束了。 初步分析APP:360加固,Unity3D、mono 目测加固只处理了dex,毫不影响我们分析U3D,OpenArk找到DnsSpy,打开分析assets\bin\Data\Managed\Assembly-CSharp.dll 然后看下C#反编的代码,很清晰,无混淆、无VM,省事不少。很快就找到PlayerPrefsManager类,看名字应该就是管理Preference用的。 public class PlayerPrefsManager : MonoBehaviour { public int GetGems() { return ObscuredPrefs.GetInt("Gems"); } } GetGems是获取金币的函数,虽然用了Anti-Cheat Toolkit(一个反作弊的工具包),调用ObscuredPrefs来对数据做加密保护,但丝毫不影响我们操作,直接Patch几条IL指令,return int.MaxValue; nop ldc.i4 0x7fffffff stloc.0 ldloc.0 ret 保存替换原apk中Assembly-CSharp.dll,最后签名即可。 结果模拟器正常,但在手机里崩溃,看来在高版本系统里有问题(多半是libjiagu惹得祸),不想管了,外网找了个新版本v1.9.8。 分析新版本:无加固、Unity3D、il2cpp 没任何保护的代码直接Il2CppDumper分析global-metadata.dat,ida里找到GetGems函数,Patch即可,打包、签名同上。 第二个APP 小学数学加减法电脑版 版本:0.0.2 下载地址:https://dl.pconline.com.cn/download/2343535.html 小学数学加减法电脑版是一款热门的学习办公软件,功能齐全,操作简单流畅,具备良好的用户体验。本站提供小学数学加减法电脑版下载。本来是自用的,现在放出来给有需要的家长。 带小孩出去时候,经常有些碎片时间,比如去餐厅吃饭之前,这个时候小孩都是在玩电脑游戏,所以想着能不能利用起来,考虑到自己儿子也在读小学,就做了这个小软件,方便家长让一二年级的小孩练习数学计算。 提供一二年级的数学加减乘除运算测试,一次10题,花费的时间也不多,通过自己小孩测试情况看,还是有效果的。 这个APP很不错,简单有用,给作者点赞!但是没开源,看了一下,是H5的,直接修改www目录的js。 最后改造:修改了下题目的难度,打包签名即可,后面还可以基于作者的模板自己写题。 文末 本文只是做个简单小记,说明如何修改两个APP,更多只是为了解决我的小需求,感兴趣或者有疑问的可Email联系。

调试0xC0000142错误的通用方法

开篇 我相信用过Windows的人都经历过0xC0000142错误。多年前也解决过此类问题,最近写代码时又遇到了,于是打算将解决过程记录下来。 何为0xC0000142错误? 弹框是一个HardError(不明白的自行搜索),打开OpenArk查看NTSTATUS错误码如图所示: 提示动态库DLL初始化例程失败,说明某关键DLL的DllMain返回失败,那么是谁初始化失败? GFlags归来 以下是Gflag介绍,具体使用参考windbg帮助文档 GFlags (the Global Flags Editor), gflags.exe, enables and disables advanced debugging, diagnostic, and troubleshooting features. It is most often used to turn on indicators that other tools track, count, and log. 打开windbg目录下的gflags.exe,切换到ImageFile标签,输入cmd.exe后按tab键激活,勾选Show loader snaps,点击应用即可,如图所示: gflag.exe只是单纯将调试标志位写入注册表HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options,这一切还得靠Windows强大的调试设施支撑。 Loader Snap可以理解为调试输出标志位,用于打印系统PE Loader的日志。上述错误发生在遍历输入表依赖并调用初始化函数,所以开启该选项。 Windbg登场 回到代码本身,当时写的一个伪造父进程的代码片段,执行调用:test.exe cmd.exe {ppid} BOOL TestFakeParentCreateProcess(char *exepath, DWORD ppid) { //打开要伪造的父进程句柄 HANDLE pphd = OpenProcess(PROCESS_CREATE_PROCESS, TRUE, ppid); SIZE_T size = 0x30; STARTUPINFOEXA si = { 0 }; PROCESS_INFORMATION pi = { 0 }; si.