defcon-quals 2023 crackme.tscript.dso wp
队友找到的引擎TorqueGameEngines/Torque3D (github.com)
将dso文件放到data/ExampleModule目录下,编辑ExampleModule.tscript文件
function ExampleModule::onCreate(%this)
{
trace(true);
exec("./crackme");
__main("aaaaaaaa");
quit();
}
然后点击主目录下的Torque3D-debug.bat就可以在生成的console.log文件里看到输出,发现使用的是getc获取输入,putc输出。
下载源码,在Engine\source\console\console.cpp中找到执行dso文件的位置

另外在CodeBlock这个类里面看到了一个dumpInstructions函数可以dump指令于是在code->read后面加上一个code->dumpInstructions语句来查看指令码,结果发现其他函数都有输出,只有我们的dso文件没有输出,麻,看代码。

发现造成没有输出的原因是codeSize为0;
再看看read函数发现果然读取文件后没有改变codeSize,有点小坑。
在这里加上一句改写codeSize。

这样就可以输出dso文件字节码了,由于字节码过长这里就不放了。
首先查找getc被调用的位置,发现在getc后面有一些OP_CMPNE指令,猜测这里是比较的地方,查看exec函数里实现OP_CMPNE的位置,发现是用doFloatMathOperation函数处理的,加上一句把比较的数据打印出来。

发现在IP=4125的地方有一个比较97与102的cmpne,97就是a的ascii码,102是f的ascii码,再看一下打印出的字节码发现结构很类似,首先getc然后再getc的地址+101处比较,然后比较处+18再次getc,这样就可以该写代码来获取flag,更改处如下



然后再log中发现了

看来不是简单的比较,接着看后面的字节码
简单讲一下指令的作用,其他指令基本一看就知道干嘛的。
OP_LOAD_LOCAL_VAR_UINT stk=+1 reg=4 --> push reg[4];
OP_SAVE_LOCAL_VAR_UINT stk=0 reg=7 --> mov reg[7], stack[sp];
OP_POP_STK --> sp--
发现后面的处理其实跟前面差不多只是把cmpne变成了sub,偏移变成了103,再修改一下代码得到第二部分的flag

接着看后面的指令,重点关注调用了doIntOperation和doFloatMathOperation的指令
而后面每两个getc之间的指令就变得特别多了达到了几万条,有限时间内肉眼看是基本上看不出来了,开始乱猜大法。
发现一个可疑的指令后面load了一个108,查找规律,发现应该是这个,偏移为距getc+61处,然后发现其实上面的也可以在这里获取到。
获取到第三部分flag
flag{vmprotect?_where_we_re_going_we_ll_need_protecti
再看下后面的指令,发现先将所有的数据全加起来跟减去1327

添加以下代码仔细观察数据操作指令


将输入改为flag{vmprotect?_where_we_re_going_we_ll_need_protecti0123456789abcdefghijklmnopq}输出为

再往后发现每次从输入中去除一个然后累加再减去以下数据然后判断等不等于0,这里的16776909等是因为signed类型的负数与0xffffff与得到结果,所以是个解方程问题,z3一把梭
[1327, 1394, 1332, 1347, 1372, 1360, 1394, 1365, 1333, 1347, 1326, 1338, 1391, 1347, 1324, 1333]
from z3 import *
sub = [1327, 1394, 1332, 1347, 1372, 1360, 1394, 1365, 1333, 1347, 1326, 1338, 1391, 1347, 1324, 1333]
s = Solver()
flag = Ints("flag%d" %i for i in range(16))
for i in range(16):
s.add(flag[i] >0)
s.add(flag[i] <128)
exceptIndex = 14
for i in range(16):
result = 0
exceptIndex = (exceptIndex + 1) % 16
for j in range(16):
if j != exceptIndex:
result += flag[j]
s.add(result == sub[i])
if s.check() == sat:
print("find")
m = s.model()
f = ""
for i in range(16):
f += chr(m[flag[i]].as_long())
print(f)
得到flag
flag{vmprotect?_where_we_re_going_we_ll_need_protecti0n_FR0Mm_th3_vms}

只要跟踪每个getc后面的指令就可以分析清楚整个流程。
defcon-quals 2023 crackme.tscript.dso wp的更多相关文章
- HGAME 2023 WP week1
WEEK1 web Classic Childhood Game 一眼顶真,直接翻js文件,在Events.js中找到mota(),猜测是获取flag,var a = ['\x59\x55\x64\x ...
- 2019 安洵杯 Re 部分WP
0x01.EasyEncryption 测试文件:https://www.lanzous.com/i7soysb 1.IDA打开 int sub_416560() { int v0; // eax i ...
- 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])
常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...
- wp已死,metro是罪魁祸首!
1.这篇文章肯定会有类似这样的评论:“我就是喜欢wp,我就是喜欢metro,我就是软粉“等类似的信仰论者发表的评论. 2.2014年我写过一篇文章,windows phone如何才能在中国翻身? 我现 ...
- 关于 WP 开发中.xaml 与.xaml.cs 的关系
今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...
- Android,ios,WP三大手机系统对比
从前,我以为.一个手机系统只是一个系统的UI风格,没什么不同的.然而,在我混合使用这三个手机系统之后,才明白,一个手机系统远不只一个UI那么简单,而真的是可以称之为一个“生态”. 首先祭出三台经典设备 ...
- DSO之光度标定
光度标定(Photometric Camera Calibration)是DSO(Direct Sparse Odometry)论文中比较特别的一部分.常规的vSLAM不太考虑光度标定的问题.比如基于 ...
- 搜狗输入法wp风格皮肤
换了个nexus 发现输入法真的没有wp的好用 没办法,刚好搜狗输入法有定制皮肤的选项,所以自己做了个wp风格的输入法皮肤. 一点微小的工作 http://pan.baidu.com/s/1kVsHd ...
- 免费获取WP之类的开发者权限或免费使用Azure 2015-10-19
上一次弄wp真机调试的时候,卡住了,这里讲一下怎么解决(http://www.cnblogs.com/dunitian/p/4870959.html) 进这个网址注册一下:https://www.dr ...
- 【WP开发】读写剪贴板
在WP 8.1中只有Silverlight App支持操作剪贴板的API,Runtime App并不支持.不过,在WP 10中也引入了可以操作剪贴板的API. 顺便说点题外话,有人会说,我8.1的开发 ...
随机推荐
- 【Avalonia】【跨平台】关于控件阴影简单用法
背景 当我们在用Avalonia开发项目时,我们可能会对控件添加一些阴影效果,改善用户体验,我们开发WPF的人知道,WPF会给我提供Effect这么一个属性,这是方便我们进行阴影以及特效使用,但是Av ...
- Django笔记十一之外键查询优化select_related和prefetch_related
本篇笔记目录如下: select_related prefetch_related 在介绍 select_related 和 prefetch_related 这两个函数前,我们先来看一个例子. 对于 ...
- 谁能真正替代你?AI辅助编码工具深度对比(chatGPT/Copilot/Cursor/New Bing)
写在开头 这几个月AI相关新闻的火爆程度大家都已经看见了,作为一个被裹挟在AI时代浪潮中的程序员,在这几个月里我也是异常兴奋和焦虑.甚至都兴奋的不想拖更了.不仅仅兴奋于AI对于我们生产力的全面提升,也 ...
- [ACM]TL-Prim
#include<iostream> #include<cstdio> using namespace std; int main(){ int inf = 99999999; ...
- centos7搭建bsc全节点
Centos7搭建bsc全链节点 服务器配置 CPU:8 Cores - 16 Threads RAM:131072 MB Storage:2x 2000GB NVMe Bandwidth:8400 ...
- 管理WEB服务器文件的WebDAV协议&HTTP大跃进--QUIC与HTTP30&WEB安全攻击概述
管理WEB服务器文件的WebDAV协议 WebADV协议 WEBDAV追加方法 WeDAV请求示例 HTTP大跃进--QUIC与HTTP30 QUIC&HTTP3.0 HTTP2.0的问题 队 ...
- KVM WEB管理工具 WebVirtMgr
一.webvirtmgr介绍及环境说明 温馨提示:安装KVM是需要2台都操作的,因为我们是打算将2台都设置为宿主机所有都需要安装KVM相关组件 github地址https://github.com/r ...
- XmlSerializer 反射类型xxx时出错,反射属性xxx时出错。
在使用XmlSerializer将类序列化成XML时出错,看到InnerException的message可以知道是这个receiver里有错误,进入这个类查看一下代码发现有重名的类 NodeId类修 ...
- React Native组件(二)
一.创建一个项目 1.1.找到目标目录cmd命令,请尽量不要有中文路径 npx react-native init reactnative03 进入文件 cd reactnative03 启动 npx ...
- Python 明明安装了Crypto模,但报错No module named “Crypto“
安装网上的解决方法卸载:pip uninstall cryptopip uninstall pycryptodomepip uninstall pycrypto重装:pip install Crypt ...