본문 바로가기

리버스-엔지니어링

(29)
리버싱 레나 튜토리얼20 - UnPackMe 리버싱 레나 튜토리얼19 - 안티 디버깅https://jdh5202.tistory.com/678
리버싱 레나 튜토리얼19 - 안티 디버깅 리버싱 레나 튜토리얼18 - 코드 암/복호화https://jdh5202.tistory.com/677 OllyDBG와 같은 디버깅 프로그램은 ③번 창이 나오면서 실행이 차단된다. 디버거를 실행했을 때 ②번 창이 나타나도록 패치한다. 올리디버거에서 All referenced text strings를 이용하여 ③번 메시지에 해당하는 항목을 찾은 뒤 BP를 설정한다. 디버거를 탐지하는 함수 프롤로그에 문자열이 정의된 곳은 401234이다. PUSH를 호출하는 분기점인 401208로 이동한다. 함수 시작점인 4011CB 부터 분석을 시작한다. CreateToolhelp32Snapshot 32bit windows OS에서 현재 실행중인 프로세스 목록을 가져오는 내장 함수이다. Process32First 가져온 목록..
리버싱 레나 튜토리얼18 - 코드 암/복호화 리버싱 레나 튜토리얼16 - URLegalhttps://jdh5202.tistory.com/676 2byte 패치만으로 nag 창을 제거하라고 나타난다. 프로그램 실행 시 두 번째 창만 나오도록 바이너리를 패치한다. 올리디버거로 해당 프로그램을 열어 ①번 팝업 분기로 의심되는 위치에 BP를 걸고 실행한다. 그러나 해당 부분에 중단점이 걸리지 않았다. Messagebox로 생각되는 4012BD에 직접 BP를 걸고 실행해도 걸리지 않는다. 즉 눈에 보이는 코드는 가짜 코드임을 알 수 있다. 상세 분석이 필요하므로 해당 코드 윗부분을 살펴본다. 호출 하는 함수 두 개가 있으므로 내부 로직을 파악한다. 1번 복호화 함수 - 40130F ②번째의 401000 주소 부분이 디버깅 시작전에는 알 수 없는 형태의 코드..
리버싱 레나 튜토리얼16 - URLegal 리버싱 레나 튜토리얼14 - DVD Menu Studiohttps://jdh5202.tistory.com/675 URLegal을 실행 후 종료하면 사용자 인증을 요구하는 창이 뜬다.이는 Resource Hacker를 이용하여 다이얼로그 호출 부분을 확인한다. 인증창의 dialog ID가 103인 것을 확인하였고 프로그램 어딘가에 103(HEX 67)을 호출하는 부분이 있을것으로 생각된다. 올리디버거에서 Ctrl + S(명령 찾기)를 눌러서 PUSH 67을 찾아본다. 중복된 값은 여러 개 수 있으니 PUSH 67을 전부 찾은 다음 모두 BP를 설정하고 실행한다. 그러고 계속 F9로 실행하여 인증 창이 띄어지는 BP에서 멈추는 부분을 찾는다. 함수 프롤로그를 살펴보면 위 사진에는 자세히 보이지 않지만 PUS..
리버싱 레나 튜토리얼14 - DVD Menu Studio 리버싱 레나 튜토리얼13 - XOFTSPYhttps://jdh5202.tistory.com/674 ①프로그램 초기화면 이후 ②라이선스 인증 창이 나타난다. 라이선스 인증 우회가 목적이므로 ②번 창을 뜨지 않도록 해야한다. 우선 프로그램의 원활한 분석을 위해 강제로 라이선스를 만료시킨다. 사용 만료일이 30일인데 그 시간동안 기다릴 수 없으므로 컴퓨터 시간을 30일 전으로 조작한다.그리고 프로그램을 실행/종료 후 다시 컴퓨터 시간을 30일 후로 되돌려 놓으면 해당 프로그램은 30일이 지났다고 여겨 아래 사진처럼 라이선스가 만료됐다는 창이 뜬다. Enter Reg. Code에 들어가서 이름, 시리얼, 코드를 입력하고 Ok 버튼을 누른다. 인증키 검증 에러 창에 나타난 문자를 검색한다. 4DC1B1로 이동하면..
리버싱 레나 튜토리얼13 - XOFTSPY 리버싱 레나 튜토리얼11 - Flash Jigsaw Producerhttps://jdh5202.tistory.com/673 프로그램을 쓰기 위해 사용자 등록을 해야 한다. About > Enter Registration Code > Registration에서 사용자 코드를 등록했을 때 위 오류 메시지가 나타난다. 문자열이 정의된 주소로 이동하여 인증의 성공과 실패를 결정하는 분기점을 찾는다. 함수 프롤로그 위를 살펴 보면 인증 분기점이 존재한다. JNZ를 무조건 점프하도록 JMP로 변경하여 사용자 등록에 성공하도록 만든다. 사용자 등록 이후 About을 보면 등록되지 않았다고 출력되므로 위 방식과 똑같이 해당 문자열이 정의된 주소로 이동한다. 정의된 문자열로 이동해보면 라이선스 인증 성공, 실패와 관련된..
리버싱 레나 튜토리얼11 - Flash Jigsaw Producer 리버싱 레나 튜토리얼8 - artgemhttps://jdh5202.tistory.com/672 Flash Jigsaw Producer Installer를 실행하고 Next를 누르면 Destination Directory에 바로가기 FjP 파일이 생긴다. 해당 프로그램을 분석한다. ி 라이선스 시작점 프로그램 실행 후 새로운 이미지 추가(Desk > Select)를 하려고 한다. 그러나 아래와 같은 메시지가 출력된다. referenced text strings로 해당 문자열 위치를 찾는다. 408B9C 주소로 이동했지만 인증 성공과 관련된 분기점이 없어 보인다. 다른 단서를 찾기 위해 프로그램 타이틀부터 찾아본다. 404700 주소로 이동하니 인증 성공/실패에 관련된 분기점으로 의심되는 곳이 보인다. 40..
리버싱 레나 튜토리얼8 - artgem 리버싱 레나 튜토리얼7 - MrBillshttps://jdh5202.tistory.com/671 프로그램 초기 화면에는 사용자가 인증 키를 등록하지 않아서 미인증 메시지가 나타난다. 메인 화면에서 ? > Register를 클릭하여 사용자 키를 등록할 수 있으며 항목을 기재하고 OK를 누르면 오류 팝업이 발생하므로 이를 패치한다. 오류 문자열을 찾아서 인증 분기점을 탐색한다. 함수 프롤로그 위로 쭉 가보면 인증 성공을 나타내는 메시지가 존재한다. 더 상단으로 올라가면 인증 성공/실패 분기점이 나온다. JE 분기문을 JMP로 바꾸고 성공 루틴으로 건너뛰면 초기화면에 미인증 메시지를 출력하므로 시도해볼 방법은 아니다. 분기 여부를 결정하는 EAX가 어떤 호출 함수에 영향을 받는지 확인해야한다. 우선 분기문과 ..