某工控CTF逆向分析

Gui程序无壳,64位。但是程序有反调试。会动态在内存中还生成另外一个PE程序,调试后发现无用,就是为了迷惑调试程序。
查看程序
 


 


程序需要输入正确的字符串,才能返回正确的flag。搜索字符串,发现没有现成可用的字符串。
打开程序,发现有对话框输入。搜索输入表中关于字符串输入的api,发现GetDlgItemTextA()函数可用。
程序拖入ida,找到GetDlgItemTextA()函数。查询函数引用,下断点动态调试。

随意输入1234567,点击确定。程序在GetDlgItemTextA()函数中断。
 


读取我们输入的字符串。
 


反调试在函数1中。进入函数1。一路F8执行,不要让程序返上跳转,避开循环。进行call rax函数。
 


一路F8顺序执行。进入call near ptr unk_20805D7241C函数。
 


在这里可以把al的值改为0,但是会影响到函数2的入栈参数值。能避开反调试,但是会续会影响程序执行。显然这里不能改为0。
 


在0x000020B05D72515处进入函数。重复调试程序时,函数地址和函数名会有变化。
 


在cmp rsi,rdi后一定不可以往上返回执行。Call cs:off_20805D83268程序执行会挂掉。修改ZF状态位为1。往下继续执行。
 


一路执行到函数2的位置。如果在上面的位置修改al=0后,这里的RAX会为0。那么在函数2里执行错误。函数2继续执行。之前直接修改al为0,RAX中的值用其它的值来填充。结果计算错误。
 


函数2正确执行后,会生成正确的rax的值。Call rax为程序解密函数。在这里也试过用hook输出每个call的地址,重复调试时,地址会有变动。
 


真正有用的数值,在call rax函数里以立即数的方式写入数组中。将C8 A6 87 EF B6 C4 FA FE B0 C4 EC 80 D6 C7 AA立即数写入rsp+30h指向的内存地址中。
 


另外一个立即数写入数组中。将0B5AA9785h写入rsp+20h指向的内存地址中。
 


记录二个数组的地址,继续运行。看后续如何计算。
我们输出的1234567字符串计数运算。
 


存储在r14d寄存器中。长度为7。

答案运算的函数。
debug099:0000020B05D71741 mov rax, rdx ; 运算
debug099:0000020B05D71744 inc rdx
debug099:0000020B05D71747 and eax, 3
debug099:0000020B05D7174A movzx eax, byte ptr [rsp+rax+20h]
debug099:0000020B05D7174F xor al, [r9+rcx]
debug099:0000020B05D71753 mov [rcx], al
debug099:0000020B05D71755 inc rcx
debug099:0000020B05D71758 sub r8, 1
debug099:0000020B05D7175C jnz short loc_20B05D71741 ; 运算
我们在这里将rcx的值改为指向rsp+30h地址。将r8改为14。al的值为rsp+20h,所以这里不用修改。

脚本编写:
import sys
buf1= [0xC8,0xA6,0x87,0xEF,0xB6,0xC4,0xFA,0xFE,0xB0,0xC4,0xEC,0x80,0xD6,0xC7,0xAA]
buf2=[0x85,0x97,0xAA,0xB5]
buf3=[chr(buf1[i] ^ buf2[i&3]) for i in range(len(buf1))]
"".join(buf3)
print buf3

输出:
python test.py
['M', '1', '-', 'Z', '3', 'S', 'P', 'K', '5', 'S', 'F', '5', 'S', 'P', '\x00']

2022年工控CTF是一场以工业控制系统为主题的网络安全竞赛。随着工业互联网的普及和工控系统的数字化转型,工控CTF成为了信息安全领域的重要赛事之一。 在2022年工控CTF中,参赛团队将面临一系列与工控系统相关的攻防挑战。这些挑战可以涉及到工控设备的漏洞利用、网络通信的拦截与解密、工控协议的逆向工程等多个方面。参赛团队需要通过团队合作和技术创新来解决这些挑战,保护工控系统的安全。 比赛期间,参赛团队将利用自身的技术实力和经验来攻击对手的工控系统,并尽量保护自己的系统免受攻击。团队成员需要通过分析工控设备的漏洞、拦截网络通信和复现攻击场景等手段,来获取对手的密码或控制权限,并将此作为攻击对手的关键。 这次工控CTF不仅是对技术实力的考验,也是对团队协作能力的挑战。参赛团队需要有效地分工合作,每个成员发挥擅长的技能,进行攻防策略的制定和执行。只有团队成员之间的密切配合和高效沟通,才能在限时的比赛中取得优异的成绩。 通过参与2022年工控CTF,参赛团队将能够提升自身的技术水平和安全意识,了解工控系统的安全挑战,并积累宝贵的实战经验。此外,比赛还将为工控安全领域的研究和发展带来新的思路和解决方案。总之,2022年工控CTF将是一场精彩纷呈的网络安全盛宴,为参赛者带来无尽的挑战和收获。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值