본문 바로가기

🏠 HOME27

Dreamhack 리버싱 문제풀이: rev-basic-7 cmd 창 열어서 아무거나 입력. 틀렸다. 디버거로 열어서 살펴봤다. 우선 문자열 참조를 통해 메인함수를 찾아주고 이 전과 마찬가지로 test, je 직전 함수가 중요하니까 거기로 이동해준다. 함수에 대한 자세한 설명은 위 캡쳐 화면 주석에 달아 놓았다. 정답 주소 든 곳을 덤프로 따라갔다. 이제 코드를 짜기 위해 IDA로 열어줬다. sub 어쩌구 함수로 들어가주면 ___ROL1___ 함수가 눈에 띈다. 인터넷에 찾아보니 shift 연산과 관련된 함수이다. #include int ror(int x, int n) { int shift = x >> n; int src = x 2023. 11. 1.
Dreamhack 리버싱 문제풀이: rev-basic-6 첫 번째 함수: (00007FF6F187302) 63 7C 77 7B F2 6B 6F C5 30 01 67 2B FE D7 AB 76 (00007FF6F187303) CA 82 ...등등 (엄청 많음) 두 번째 함수: (00007FF6F187300) 00 4D 51 50 EF FB C3 CF 92 45 4D CF F5 04 40 50 (00007FF6F187301) 43 63 #include int main(void) { int a, i, j; int arr_1[128]={0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 0xCA ,0x82 ,0xC9 ,0x7D ,0xFA ,0x59 .. 2023. 11. 1.
(⊙_⊙)?Dreamhack 리버싱 문제풀이: rev-basic-5 *(unsigned __int8 *)(a1 + i + 1) + *(unsigned __int8 *)(a1 + i) != byte_140003000[i] 00007FF646C8300: AD D8 CB CB 9D 97 CB C4 92 A1 D2 D7 D2 D6 A8 A5 00007FF646C8301: DC C7 AD A3 A1 98 4C 00 *(unsigned __int8 *)(a1 + i + 1) + *(unsigned __int8 *)(a1 + i) != byte_140003000[i] (정답문자열[ i +1] ) + ( 정답문자열[ i ]) == 입력값[ i ] #include int main(void) { int a, i; int arr[0x18]={0xAD, 0xD8, 0xCB, 0xCB, 0x9.. 2023. 11. 1.
Dreamhack 리버싱 문제풀이: rev-basic-4 일단 들어가서 아무거나 입력해봤다. IDA로 열어봤다. sub_120001000함수에 의해 입력 값의 참 거짓이 판단된다. 들어가보자. 들어가보니까 복잡하다. 0x1C번 문자를 비교하라니까 아마도 입력값은 0x1C개의 문자로 구성된 문자열인 것 같다. 어쩌구저쩌구 계산해서 같지 않으면 return 0 즉 거짓이라고 판단하니까 !=가 아니라 =가 되게 해줘야 될듯! 디버거로 열어줬다. Input 문자열 참조해 메인함수로 들어가줬다. 이전 문제드로가 마찬가지로 test, je 직전 함수가 중요하겠다. 함수로 들어가 봤다. rac를 이용해 compare 명령어로 비교해가면서 몇 번째 문자인지 체크하고 있다. 그 밑으로 여러 명령어가 보인다. 몰랐던 명령어를 기록해보면 sar는 부호를 오른쪽으로 이동하는 명령어.. 2023. 11. 1.