이 프로그램은 Key파일을 필요로 하는 프로그램이다.
'Cracked by: CodeEngn!' 문구가 출력 되도록 하려면 crackme3.key 파일안의 데이터는 무엇이 되어야 하는가
Ex) 41424344454647
일단 CRACKME3.KEY파일을 만들었고,
내용에는 1111을 적었다.
ReadFile함수 호출 이후에,
12와 4를 비교하는데, 글자 수를 비교하는듯하다.
일단 글자 수를 맞춰줘야할듯.
(공백하나) CodeEngn!11111111
로 넣어줬다. 총 18글자.
1 = 0x31(아스키코드)
EAX = 31313131에서 31313100으로 변할때
SETE AL 명령어에 의해 바뀌는데,
위에 있는 cmp가 같다는 결과가 나와야 AL이 1로 set된다.
즉,
EAX의 값이 1234557B가 되어야 한다.
마지막 4글자만 수정하면 되므로 핵스에디터로 열어서 수정하자.
(이걸해줘야 창이 출력되는 곳으로 분기..
조건:al=1)
결국 마지막에 나타나는 문자열을 어떻게 해주냐가 문제.
보니까 내가 넣어준 CodeEngn이 아니고 이상한 문자열이 나옴.
중간에 보인 XOR문자열이 문제였던거같음.
XOR로 0x77^0x12345678하는 부분이 있음
xor연산결과인 0x1234560F가
402016부분에 적히는것 확인.
그럼 77이 어디서 나왔는지를 확인하면 된다..
XOR쓰기 바로 전에 있는 함수 내부 진입
0x41이랑 글자 하나를 XOR 연산한다.
C의 아스키코드 0x43
xor 0x43(C), 0x41
BL(처음엔 0x41)값은 갈수록 +1증가
xor 0x6f(o), 0x42
xor 0x64(d), 0x43
...
xor연산으로 나온 값을 다시 xor연산해주면 원래 값을 찾을 수 있으므로,
귀찮게 계산할 필요 X
그냥 결과로 나온 값들을 그대로 적어놓으면 된다.
0x2 0x2d 0x27 0x21 0x00
0x28 0x20 0x26 0x49
0x4a 0x4b 0x4c 0x4d 0x4e
역시 핵스에디터로 수정해주면 된다.
이 hex값을 나열하면 정답 인증 플래그가 된다.
'Reversing' 카테고리의 다른 글
[코드엔진] Advance 2 (0) | 2020.02.28 |
---|---|
[코드엔진] Advance 1 (0) | 2020.02.25 |
[코드엔진] basic 19 (0) | 2020.02.24 |
[코드엔진] basic 18 (0) | 2020.02.24 |
[코드엔진] basic 17 (0) | 2020.02.19 |