1.
首先是F5看了一下 winmain的调用过程。发现读了两次PE文件,还有一个Opengl绘图函数。
2.
然后写代码 dump 两次读的文件。
根据exe的界面,发现这两个图片,就是Opengl绘图的背景图。
3.ida追了半天,没追到关键点,直接上CE和OD。发现OD对矩阵下不了断点,放弃OD,使用CE。
4.按FPS的搜法,先搜出全局坐标(x,y,z)。
然后搜视角矩阵,View。按未变动,变动,进行过滤。
过滤到了35个结果,然后全局坐标改为(0,0,-1),找到VIEW矩阵。
然后准备修改视角,因为百度到了18年的改法,也懒得计算了,直接照着改。
准备将-3修改为-90,-3左边的0修改为-17.5,最左边修改为-59。
但是发现改了立马就被改回去了,于是用CE下写入断点,nop掉赋值mov。
5.回到界面,出现flag。
int
main()
{
HANDLE a
=
CreateFileA(
"C:\\Users\\TalShang\\Desktop\\ki fastcallentry\\Project1\\Project1\\2.jpg"
,
FILE_ALL_ACCESS,TRUE,NULL, OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,
0
);
DWORD pid
=
13620
;
HANDLE handle
=
OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
/
*
DWORD b
=
GetLastError();
printf(
"Error:%x"
,b);
*
/
DWORD addr
=
0x007D0180
;
char
*
mem
=
(char
*
)malloc(
0x9F97
);
SIZE_T readSize
=
0
;
ReadProcessMemory(handle,(LPVOID)addr,mem,
0x9F97
,&readSize);
WriteFile(a, mem,
0x9F97
,NULL,NULL);
system(
"pause"
);
CloseHandle(a);
CloseHandle(handle);
return
0
;
}
int
main()
{
HANDLE a
=
CreateFileA(
"C:\\Users\\TalShang\\Desktop\\ki fastcallentry\\Project1\\Project1\\2.jpg"
,
FILE_ALL_ACCESS,TRUE,NULL, OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,
0
);
DWORD pid
=
13620
;
HANDLE handle
=
OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
/
*
DWORD b
=
GetLastError();
printf(
"Error:%x"
,b);
*
/
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!