-
이쯤 되니까 너무 롸업 쓰기가 귀찮네요...
일단 빨리 다 풀고
나중에 다시 롸업쓰는걸로 ㅇㅇ...
패킹된 값 오리지널
0xb6e62e17 ^ 0x014cec81
0xb7aac2960x57560000 ^ 0x0d0c7e05
0x5a5a7e0500409228 | 33C3 | xor eax,ebx | 0040922A | 8ACF | mov cl,bh | 0040922C | D3C8 | ror eax,cl |
이게 언팩과정
from z3 import* s = Solver() b = BitVec("ebx",32) s.insert(0x5a5a7e05 == ((0xb7aac296 ^ b)*0x100000001) >> (b&0x4)) print(s.check()) print(s.model().evaluate) print(hex(3991977107))
브포코드
근데 실패함 ㅋㅋ...
#include <stdio.h> #define ROR(S,i) (((S)>>(i%32)) | ((S)<<(32-(i%32)))) #define ROL(S,i) (((S)<<(i%32)) | ((S)>>(32-(i%32)))) int main() { int i = 0; int tmp[33] = { 0, }; int tmp2[33] = { 0, }; int eax = 0xB7AAC296; int eax_2 = 0x5a5a7e05; for (i = 0; i < 33; i++) { tmp[i] = ROL(0x5a5a7e05, i); printf("%d\t0x%x ",i, tmp[i]); tmp2[i] = tmp[i] ^ 0xB7AAC296; printf("\t0x%x\t0x%x\n", tmp2[i], ((tmp2[i]&0x0000ff00)>>8)&31); if ((((tmp2[i] & 0x0000ff00) >> 8)&31) == i) printf("Ans : %x\n", tmp2[i]); } return 0; }
좀더 한참 고민해서 나온 코드
마지막에 에러떠서 그냥 하나는 내가 직접 1바이트 바꿔줌
난이도 점점 어려워 지는 듯
'Writeup > Wargame_Writeup' 카테고리의 다른 글
[ Reversing.kr ] CRC1 (2) 2020.07.17 [ Reversing.kr ] Adventure (0) 2020.04.15 [ Reversing.kr ] WindowKernel (0) 2020.04.13 [ Reversing.kr ] Metroapp (0) 2020.04.09 [ Reversing.kr ] HateIntel (0) 2020.04.08 댓글