1.查壳
32bit,加了UPX壳
2.虚拟机脱壳
Youngter-drive脱壳
3.静态分析寻找思路
跟进main_0函数
线程控制的知识不懂,去搜一下函数
createMutexW 函数
创建或打开命名或未命名的互斥对象。
HANDLE CreateMutexW(
[in, optional] LPSECURITY_ATTRIBUTES lpMutexAttributes,
[in] BOOL bInitialOwner,
[in, optional] LPCWSTR lpName
);
特性:
a.独占性-在某个时间点上,只有一个线程拥有互斥,别的线程等待,除非这个线程扔掉后,别的线程才会拥有互斥
b.所有线程都没有互斥时,线程句柄有信号,如果有一个线程拥有互斥,线程句柄无信号CreateThread函数
创建一个在调用进程的虚拟地址空间内执行的线程。
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
__drv_aliasesMem LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);WaitForSingleObject 函数
WaitForSingleObject是一种Windows API函数。当等待仍在挂起状态时,句柄被关闭,那么函数行为是未定义的。该句柄必须具有 SYNCHRONIZE 访问权限。
CloseHandle 函数
关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,CloseHandle之后,引用计数减1,当变为0时,系统删除内核对象。
查看main函数调用的函数,跟进sub_411190()函数
继续跟进
终于找了与flag直接有关的函数,重命名一下函数便于找
可以知道flag存在Dest之中,跟进
Source
找到off_418004跟进
继续跟进aToiziztoryatou
没有头绪
Source要想和aToiziztoryatou相等,一定是在别的地方有过操作,交叉引用看一下
有一处调用为此函数
我们知道Source就是输入的字符串
然后复制给了Dest
那么Source输入之后修改过没有,查看一下别的修改Source的函数
跟进这个函数
发现存在堆栈不平衡的问题
4.处理堆栈不平衡问题
转到汇编代码,在option中开启stack pointer
SP值变成了负数,修改成0才能使得堆栈保持平衡
在堆栈不平衡处按下Alt+K(SP值为负数的上一个call函数位置),修改SP值
SP是为了实现堆栈的先入后出的数据处理而设置的一个指针。它指向当前堆栈段的位置。
上述具体过程见视频
堆栈不平衡
5.根据加密函数编写wp
char *__cdecl sub_411940(int a1, int a2)
{
char *result; // eax
char v3; // [esp+D3h] [ebp-5h]
v3 = *(_BYTE *)(a2 + a1);
if ( (v3 < 97 || v3 > 122) && (v3 < 65 || v3 > 90) )
exit(0);
if ( v3 < 97 || v3 > 122 )
{
result = off_418000[0];
*(_BYTE *)(a2 + a1) = off_418000[0][*(char *)(a2 + a1) - 38];
}
else
{
result = off_418000[0];
*(_BYTE *)(a2 + a1) = off_418000[0][*(char *)(a2 + a1) - 96];
}
return result;
}
a1是传入的Source,a2是dword_418008
s = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm' #off_418000
d = 'TOiZiZtOrYaToUwPnToBsOaOapsyS' #off_418004
flag="flag{"
for i in range(len(d)):
if i%2 == 0:
flag+=d[i]
else:
if(d[i].isupper()):
flag+=chr(s.find(d[i])+96)
else:
flag+=chr(s.find(d[i])+38)
flag+="}"
print(flag)
flag{ThisisthreadofwindowshahaIsES}