1. CreateFileA() MSDN OPEN_EXISTING => "abex.l2c"이름의 파일을 open한다. 없으면 eax=FFFFFFFF로 리턴되어 00401075로 점프 따라서 abexcm3.exe와 같은 경로에 "abex.l2c"이름의 파일을 만들어줘서 해당루틴 통과 2. GetFileSize() 파일사이즈를 가져와 12와 비교. 0x12는 10진수로 18이다 메모장 or HxD로 18byte로 파일사이즈를 조정
분기1) name값이 4자리 이상이면 eax가 0이고, 4자리 미만이면 FFFF..로 TEST AX, AX 연산을 통해 점프문 분기. 이후 반복문을 돌며, name으로 serial값 생성 (비트단위 반복 연산_생략) 분기2) - MOV DWORD PTR SS:[EBP-94],EAX EAX가 가리키는 값(serial값 ex.4444)을 스택 ebp-94에 복사한다. [memory] eax = 465AAC [stack] LEA 명령어를 통해 EBP-44,34의 주소값을 edx,eax에 복사한후, 스택에 push한다. 이후 함수를 호출하고, TEST AX AX 결과에 따라 점프분기한다. 역시 분기흐름을 임의로 바꿔주면 다음과같이 창이 뜨긴 한다. MOV vs LEA EBP = 0019F2B0 , EBP-88 ..
Help_About Help_Register 아무값이나 입력하면 다음과 같은 창이 뜬다. Register창이 뜨는부분에 breakpoint를 걸고 따라가보았다. 메인코드 CALL DialogBoxParamA()함수를 통해 Register창을 띄우고 값을 입력한뒤 돌아오면 위의 상태이다. ASCII로 내가 입력한 값이 들어가있는것을 확인할 수 있다. 회색 음영라인에서 CMP비교후 JE 점프문에 의해 분기가 나뉘는게 보인다. 분기가 나뉜후, CALL하는 두 MessageBox 물론, 분기가 나뉘는 부분에서 점프문or플래그를 패치하면 다음과 같은 창을 볼 수 있긴하다. 좀더 자세히 프로그램이 원하는것을 알아보자. 그런데 여기서 name과 serial값 모두 스택에 넣고 어떠한 주소를 call하는 과정을 거치는..
[분석] scanf로 입력받은 "123"과 "Asm07REC"를 strcmp로 비교함. 이후, ADD ESP 3C로 스택을 날리고 JNZ SHORT 690010F3에서 분기가 나뉜다. - 자세히는, strcmp에서 두 문자열이 같으면 eax가 0으로, 다르면 FFFFFFFF로 돌아온다. 이후 TEST eax eax를 통해 ZF가 1/0으로 세트되고, JNZ문에서 ZF값에 따라 분기 흐름. * Z Flag & JZ,JE,JNZ,JNE... - Jump if Zero=Equal - ZF=1이면 실행됨 (Zero Flag가 1(On)이라는건, "Zero라는것"="연산결과가 0이라는것") - JNZ=JNE는 반대 * TEST [Operand1] [Operand2] TEST연산은 두 피연산자를 AND연산하여 그 ..
- Total
- Today
- Yesterday
- FRAGMENT
- 프로그래머스
- Android
- Java
- git
- C
- reversing
- 개발자
- Android Studio
- graph
- 우아한 테크코스
- 해외여행
- Vo
- mysql
- Data Structure
- 웹해킹
- sort
- webhacking.kr
- brute-force
- queue
- javascript
- bfs
- Algorithm
- Stack
- JPA
- 리버싱
- socket
- 회고
- dfs
- OneToMany
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |