※문제 ※

Main 함수 내부 코드
int __fastcall main(int argc, const char **argv, const char **envp)
{
char v4[256]; // [rsp+20h] [rbp-118h] BYREF
memset(v4, 0, sizeof(v4));
sub_1400011C0("Input : ", argv, envp);
sub_140001220("%256s", v4);
if ( (unsigned int)sub_140001000(v4) )
puts("Correct");
else
puts("Wrong");
return 0;
}
프로그램은 사용자로부터 입력을 받아들이고, 해당 입력을 조건을 따라 판별하여 "Correct" 또는 :"Wrong"을 출력합니다.
프로그램의 실행은 main함수를 통해 시작되고, 입력은 256글자까지 저장할 수 있는 배열을 통해 처리하게 되어있습니다.
문자열 판별을 위해 sub_140001000로 이동해보겠습니다.
__int64 __fastcall sub_140001000(__int64 a1)
{
int i; // [rsp+0h] [rbp-18h]
for ( i = 0; (unsigned __int64)i < 0x18; ++i )
{
if ( *(unsigned __int8 *)(a1 + i + 1) + *(unsigned __int8 *)(a1 + i) != byte_140003000[i] )
return 0i64;
}
return 1i64;
}
if문을 확인해보면 a1배열의 i번쨰와 i+1번쨰 요소를 더한 값아 byte_140003000 배열의 i번쨰 요소와 같은지 같지않은지 확인합니다.
byte_140003000 배열을 확인해봅시다
.data:0000000140003000 ;org 140003000h
.data:0000000140003000 ; unsigned __int8 byte_140003000[32]
.data:0000000140003000 byte_140003000 db 0ADh, 0D8h, 2 dup(0CBh), 9Dh, 97h, 0CBh, 0C4h, 92h
.data:0000000140003000 ; DATA XREF: sub_140001000+48↑o
.data:0000000140003009 db 0A1h, 0D2h, 0D7h, 0D2h, 0D6h, 0A8h, 0A5h, 0DCh, 0C7h
.data:0000000140003012 db 0ADh, 0A3h, 0A1h, 98h, 4Ch, 9 dup(0)
.data:0000000140003020 qword_140003020 dq 0FFFFD466D2205DCDh ; DATA XREF: __report_gsfailure+B4↑r
arr = [0xAD, 0xD8, 0xCB, 0xCB, 0x9D, 0x97, 0xCB, 0xC4, 0x92, 0xA1, 0xD2, 0xD7, 0xD2, 0xD6, 0xA8, 0xA5, 0xDC, 0xC7, 0xAD, 0xA3, 0xA1, 0x98, 0x4C, 0x00]
위 값들로 계산을 해야하는데 저는 c언어로 구현해보겠습니다.
C언어 구현
#include <stdio.h>
int main() {
int arr[24] = {0xAD, 0xD8, 0xCB, 0xCB, 0x9D, 0x97, 0xCB, 0xC4, 0x92, 0xA1, 0xD2, 0xD7, 0xD2, 0xD6, 0xA8,
0xA5, 0xDC, 0xC7, 0xAD, 0xA3, 0xA1, 0x98, 0x4C, 0x00};
int a[24];
a[22] = 0x4C;
for (int i = 21; i >= 0; i--)
a[i] = arr[i] - a[i + 1];
for (int i = 0; i < 23; i++)
printf("%c", a[i]);
printf("\n");
return 0;
}
코드를 구현해봤으니 실행해봅시다

All_l1fe_3nds_w1th_NULL로 플래그가 나오게 됩니다.
'해킹&보안 > 악성코드 및 치트' 카테고리의 다른 글
| 악성코드 분석 1 (3) | 2024.05.12 |
|---|---|
| Reverse Engineering 7 (0) | 2024.05.11 |
| Reverse Engineering 5 (1) | 2024.05.01 |
| Reverse Engineering 4 (1) | 2024.03.27 |
| Reverse Engineering 3 (2) | 2024.03.25 |