본문 바로가기

Reversing

(12)
Reversing.kr Music Player 보호되어 있는 글입니다.
Reversing.kr Easy Unpack ReversingKr UnpackMe Find the OEP ex) 00401000 루프문이 조잡하게 되어있다. JE 를 JNZ 로 바꿔 바로 빠져나오거나루프문 밖의 코드에 F2 , F9 로 통해 빠져나오면 된다. 이상한 곳으로 뛰는데, 여기가 OEP다. 끗
CodeEngn Basic 09 멀쩡한 프로그램인데 StolenByte????? 를? 구하라고? 한다이전에 풀때에도 엥??하면서 얼렁뚱땅 넘어갔던 문제다. StolenByte 에 대해 알아보도록 하자 [Ask.fm ICEWALL] 참고 쉽게말해 Unpack -> OEP -> [Some Code] -> Code 였던 프로그램을 조작해Unpack -> [Some Code] -> OEP -> Code 가 되도록 바꿔놓았다는 것이다. 우선 언패킹을 진행해보자 언패킹 수작업 - 언패킹 툴 - https://upx.github.io/ *참고 : upx -d asdf.exe (언패킹)upx asdf.exe (패킹) 언패킹 후 실행하니 글자가 깨져버렸다 아까 설명했듯이 StolenByte가 String 들을 훔쳐간거같다 다 뺏기고 NOP 만 남은 O..
CodeEngn Basic 08 계산ㄱㅣ당 OEP 는 Original Entry Point 엔트리 포인트(entry point)는 제어가 운영 체제에서 컴퓨터 프로그램으로 이동하는 것을 말하며, 프로세서는 프로그램이나 코드에 진입해서 실행을 시작한다. 어떤 운영체제나 프로그래밍 언어에서, 초기 엔트리는 프로그램의 한 부분이 아니라 런타임 라이브러리의 한 부분이다. 즉 런타임 라이브러리가 프로그램을 초기화하고 프로그램에 진입한다. 다른 경우에는 프로그램이 진입 직후에 바로 런타임 라이브러리를 호출하고, 이것이 반환된 후에 실제 실행을 시작한다. 이것은 로드 타임에서 런타임으로의 전환이다.간단한 레이아웃(흔히 스크립트 언어, 간단한 바이너리 실행 파일 포맷 그리고 부트 로더)에서는 시작점에서 실행을 시작한다. 또는 상대 주소나 절대 주소가..
CodeEngn Basic 07 7번도 시리얼 찾기 문제다 전 문제와 같이 접근한다 lstrcat 을 세번 호출하여 전체 플래그를 만들고 strcmp 를 통해 비교하는 것 같다. strcmp 에 브레이크를 걸고 플래그를 확인하자 찾았다 끗 //코드엔진 7번
CodeEngn Basic 06 시리얼을 체크하는 문제이다이전 문제처럼 문자열 검색 (Search For - All referenced text strings) 를 통해진입하자 GoodJob ! 이 뜨면 되는 것 같은데,,바로 위에 AD46DFS547 이라는 문자열이 뭘까 프로그래밍 구조상 Char flag = "AD46DFS547"scanf(a)if(a == flag) printf("GoodJob")else printf("Wrongserial") 이런거라고 추측해볼 수 있다 끗 // 코드엔진 6번
CodeEngn Basic 05 실행시 이런 창이 뜬다. Username과 key값을 구하는게 문제이다 올리디버거에서 우클릭 - search for - all referenced text strings 를 통해문자열을 찾아보자. 이부분이 시리얼 체크 부분으로 보인다 이동해보자. 뭔가 난해해보인다. 하지만 걱정하지 말자. 아직 5번인데 어려울 수 없다.CALL 되는 함수는 F7 로 분석 해볼 수 있지만, 어떤 역할을 하는 함수인지 대충 안다면 분석할 필요까지는 없다. Beggar Off! 거지 ㄲㅈ? 라는 String 이 두번 보인다.두곳 모두 F2로 브레이크 포인트를 걸고 F8 로 진행해보자 이 주소에서 멈추게 되었다.이때 바로 위줄의 PUSH 0x0 을 확인해보니JUMP From 0040F39 이다. 이때 0040FD39 는 분기점이..
CodeEngn Basic 04 이번에도 Ctrl N 으로 목록을 훑어보니 Is Debugger present?디버거 지금 씀? 이게 답이다. 더 나아가 문제를 풀어보자 IsDebuggerPresent 함수는 디버거를 탐지하고탐지되면 1을 리턴, 탐지되지 않으면 0을 리턴하므로 CALL 하는 부분을mov eax,0 으로 바꿔주면호출하지 않으므로 간단히 우회가 가능하다 끗 // 코드엔진 4번