C언어(2)
-
C언어 리버싱(3)
구조체와 API Call C언어 리버싱을 할 때 또 중요한 점은 구조체를 알아내는 것이다. 스택 포인터만 보고도 구조체의 크기나 코드에서 사용하는 API의 인자를 파악하는 것이 필요하다. 여기서는 STARTUPINFO와 PROCESS_INFORMATION 구조체를 사용해 새 프로세스를 생성하는 코드를 분석해보자!!! void RunProcess() { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb=sizeof(si); ZeroMemory(&pi, sizeof(pi)); //Start the child process. if(!CreateProcess(NULL, "MyChildProcess", NULL, NULL, FAL..
2022.10.27 -
C언어 리버싱(2)
if문 이번에는 조건문을 리버싱해보자. #include using namespace std; int Temp(int a) { int b = 1; if (a == 1) { a++; } else { b++; } return b; } int main(int argc, char* argv[]) { Temp(1); } 코드는 다음과 같다. push ebp mov ebp, esp push ecx mov dword ptr [ebp-4], 1 cmp dword ptr [ebp+8], 1 jnz short loc_40101C mov eax, [ebp+8] add eax, 1 mov [ebp+8], eax jmp short loc_401025 loc_40101C: mov ecx, [ebp-4] add ecx, 1 mov ..
2022.10.13