HGAME WEEK4 REVERSE shellcode
shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名。shellcode常常使用机器语言编写。 可在暂存器eip溢出后,塞入一段可让CPU执行的shellcode机器码,让电脑可以执行攻击者的任意指令。
但是这道题目对于shellcode的定义应该是从机器码出发的,并不是利用程序漏洞。
通过ida对函数的分析我们大概可以知道这是用GO语言编写的程序
GO的主函数一般都是以main_main命名的,找到他
可以看到几处明显的base64解密
密文里也有’+‘这种比较显著的base64符号
看了官方wp才发现010editor有那么强大的功能可以直接从base64解码并粘贴
粘贴完后直接保存为.exe放到ida里就能发现一个比较标准的tea加密(要先p一下创建函数)
解码脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <stdio.h> #include <stdint.h> void decrypt(uint32_t* v, uint32_t* k) { uint32_t v0 = v[0], v1 = v[1], sum = 32*(-0x543210dd), i; uint32_t delta =0x543210dd; uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; for (i = 0; i < 32; i++) { v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3); v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1); sum += delta; } v[0] = v0; v[1] = v1; }
int main() { uint32_t v[] = {0xe4b36920,0x936924d0,0xa816d144,0xaa82d5f5,0x3679f0da,0x7f32fd06, 0x3460c0d3,0xb7214939,0xe57269a2,0x836a51fa}, k[4] = { 22,33,44,55 }; for (int i = 0; i < 5; i++) { decrypt(&v[i*2], k); } printf("%s",v); return 0; }
|
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !