津门杯RE_Inject_and_ClimbToTop
Inject
DebugView的版本是0.76
,下载一个相同版本的做bindiff
发现sub_40F8B0
相似度不是1
修改了0x487000
开头的4个字节,然后跳过去
根据这个函数的字符串信息大概能确定这个函数跟dump功能有关,下个断点在这
选择完文件后确实是断在了上面的地方,为了方便调试直接从入口点跳过去
进入到eax地址处
在easyre节区里,跟踪下去
call之间跳过,到jmp里面去
发现这个,很像是主函数的入口
非常的main函数,猜测应该是解密了一个PE文件手动加载到内存里运行
重新调一遍上面的过程
alloc了一块内存,关注一下这块内存
多了个PE文件头,大小这样0x400
实际上是memcpy了一下,源地址处感觉是更完整的PE文件,dump下来,大小根据上下文能得到
1 |
|
创建了一个msiexec.exe
进程,然后注入
运行上面dump下来的文件,在ResumeThread
之前附加到msiexec.exe
上,在注入的代码下断点
然后恢复线程运行,调一下注入的代码,发现跟第一次的过程很相似
到上面的地方看ebp内存,一样的是PE文件,dump下来
1 |
|
直接就能分析主函数了
打开flag文件读取flag,然后进行一些处理再比较,逆向算法得到flag
第一部分会做字符变换,直接patch一下代码把a~z的变化跑出来之后查表
1 |
|
ClimbToTop
攻防世界上名字是babydsp,但应该不太对
给了dump文件和pdb文件,用windbg看了半天没看处理咋下一步,换ida
直接把可执行文件dump出来
加载一下pdb文件之后看主函数
这里的Detour把LockResource
hook了,但代码有问题,跑不了
把原本的Detour代码patch调,受用调用NewLockResource
,需要修复一下pfnLockResource
的地址,还有给.rsrc
段加可写权限
LoadRemoteLibraryR
函数看名字应该是加载DLL的
rdx指向了一个PE文件,r8是长度,dump下来
识别DllMain函数了,看了一下主要逻辑在main里面,这里生成了很多的随机数
写个简单的程序加载dump下来的dll,方便调试
主函数的开头跟结尾都很好分析
输入长度为0xc0的01串,转换为字节之后跟flag异或得到flag字符串,关键在中间的部分
主函数里一堆switch case
尝试了些控制流平坦化的脚本,没啥用,跳转是靠rcx
手动分析每一个case块
主要是根据v8进行跳转,然后做一系列的操作,case 0x50
和case 0x51
配合可以循环操作
控制流序列如下,中间有一些地址用来是部分块用来寻址存取数据用的
1 |
|
分析了一下,控制流在case 0x50
和case 0x51
之间循环,每次取出一个输入序列
类似于dp算法题
1 |
|
第i层有i个数,输入为1时向右下走,输入0时向下走,对路径上的数字求和
这里的数字是在DllMain
中rand生成的,实际上不随机,之间全dump下来,写代码尝试dp求最大值找路径
1 |
|
但是得到的最大值路径异或flag得不到正确的flag,题目也没有其他校验和提示,纯谜语,放弃思考