171110 逆向-HCTF(Re1-Evr_Q)
来源:互联网 发布:动态恐怖漫画软件 编辑:程序博客网 时间:2024/06/07 10:02
1625-5 王子昂 总结《2017年11月10日》 【连续第406天总结】
A. HCTF - Re-Evr_Q
B.
查壳显示无
运行显示Waring后直接结束,估计有反调试
于是拖入IDA检索该字符串,找到这里的调用:
稍微查了一下,TlsCallback是线程局部存储回调函数,简单来说就是在创建线程的时候调用这个函数
最简单的方法就是在OD中断下来,然后直接把它NOP掉
搞定以后重新运行,发现显示了几个字符串以后又挂了
说明还有别的地方调用反调呗╮(╯_╰)╭
查了一下WARNING字符串只有TlsCallback里调用了,那干脆把它Hook住好了:
这样就可以正常运行了,继续往下走,找到接收输入的地方,很明显这里就是关键:
0x00bd1316函数对User进行Check,IDA反编译一下比较方便:
逆序,然后通过一个乱七八糟的东西【对下标计算】,最后与输入值异或,然后比较
所以逆算法直接算出这个东西然后与比较值异或,再逆序即可:
d = [0xA4, 0xA9, 170, 190, 188, 185, 179, 169, 190, 216, 190]d1 = []for j in range(11): d1.append(chr(((((j ^ 0x76) - 52) ^ 0x80) + 43) ^ d[j]))flag = "".join(d1)print(flag[::-1])
得到Name:“M.KATSURAGI”
然后我把它提交了几十遍,没用(╯‵□′)╯︵┻━┻
刚开始上来就用IDA反编译main函数报错了:
一般在加壳、或是对解密代码段的时候会出现这种错误,堆栈识别错误
但是已经做到这里都没有出现对代码操作的地方,没道理啊
于是去0x413238看看:
记得勾上Option-general-stack pointer,查看堆栈偏移:
问题出来mov esp, ebp上了啊……ALT+K更改试试
嘿,还真行了
这样一眼就能看到CheckName之后还有Code的检查了
往下分析,跟着字符串走:
可以看到,先在sub_41114f中对input进行了第一次变换,然后分别用它得到了3个字符串,最后校验这3个部分
依次查看:
变换1很简单,依次异或0x76即可
后面3个变换其实思路一样,以变换2为例:
乍一看有点懵,但仔细分析就能得到结果 &
和|
操作一般用于二进制位中的处理,“和”操作用于取出某些位,“或”操作用于合并拼接值
对这些敏感的话,再查一下关键的0xAA的二进制:
也就是说,实际上这个操作就是把每个数异或0xad后再将奇偶位交换
分析出它的意义,逆变换就很简单了:先将奇偶位交换,再异或0xad即可
变换3、4只是异或值和取的位不同,思路都是相同的,它们分别操作14-21位和21-28位
例如变换3的0xcc是11001100,再分别左移和右移2位
逆变换同样交换即可
最后与0x41b0dc进行比较,于是把它Dump下来,然后先分段进行变换2、3、4的逆,再进行变换1的逆即可:
d2 = [30, 21, 2, 16, 13, 72, 72, 111, 221, 221, 72, 100, 99, 215, 46, 44, 254, 106, 109, 42, 242, 111, 154, 77, 139, 75, 154, 170, 65, 66, 66, 66, 19, 20, 11]for i in range(7, 14): p = (d2[i] & 0xaa)>>1 q = (d2[i]<<1) & 0xaa d2[i] = (p|q)^0xadfor i in range(14, 21): p = (d2[i] & 0xcc)>>2 q = (d2[i]<<2) & 0xcc d2[i] = (p|q)^0xbefor i in range(21, 28): p = (d2[i] & 0xf0)>>4 q = (d2[i]<<4) & 0xf0 d2[i] = (p|q)^0xeffor i in d2: print(chr(i^0x76), end='')
得到flag
这个算法还是很有意思的,不过到处都是反调有点麻烦~
C. 明日计划
HCTFRE2/数据包分析
- 171110 逆向-HCTF(Re1-Evr_Q)
- HCTF 2017 bin Level1 Evr_Q Writeup
- XCTF嘉年华 re1 Writeup
- 【HCTF】2015hctf单刷_writeup
- HCTF wzwzDingDing writeup
- 2015第七届HCTF
- hctf 2016 write up
- 2016HCTF giligili writeup
- 2016hctf Writeup.md
- 2016hctf writeup
- 2016HCTF giligili writeup
- 2015-12-4-HCTF记录
- HCTF GAME RE-Windows礼包
- 2017HCTF第一题WP
- 170707 逆向-南邮CTF逆向(WxyVM1)
- 170708 逆向-南邮CTF逆向(maze)
- Rescue(逆向BFS)
- Hdu4857逃生(逆向)
- Poj 3279 Fliptile(反转/开关问题)
- java线程安全篇之synchronized 多个线程多个锁(二)
- 小程序中的小问题
- hdu 1534 Schedule Problem
- Sending Packets LightOJ
- 171110 逆向-HCTF(Re1-Evr_Q)
- Android内存泄漏检测工具大全
- django学习链接
- Linux socket 编程
- 第一篇博客
- zotero
- WPF学习笔记---图片旋转(1)
- 快速排序法详解
- 并发工具类(一)等待多线程完成的CountDownLatch