본문 바로가기

리버스-엔지니어링

(29)
리버싱 레나 튜토리얼7 - MrBills 리버싱 레나 튜토리얼6 - PC Surgeonhttps://jdh5202.tistory.com/670 프로그램 실행 후 About 메뉴에서 라이선스를 등록할 수 있다. Register Now를 하면 아래 메시지 창이 나타난다. 우측키 > search for > All referenced text strings에 들어가서 팝업 메시지가 있는 주소로 이동한다. 해당 기능은 스크롤의 아래부분만 찾기 때문에 항상 스크롤을 제일 위로 두고 검색한다. 함수 프롤로그 윗부분을 보면 라이선스 인증 분기점이 존재한다. 분기점(JNZ)에 Breakpoint를 설정하고 프로그램을 실행하여 라이선스 인증을 시도한다. 그러면 4299B9에서 실행이 멈추게 된다. JNZ를 JMP로 바꾸면 인증 성공 루틴으로 건너뛰게 되지만 분기..
리버싱 레나 튜토리얼6 - PC Surgeon 리버싱 레나 튜토리얼5 - 체험판 프로그램 패치https://jdh5202.tistory.com/669 라이선스 인증이 안되어 체험판 사용 가능 기간과 미인증 메시지가 출력된다. 단순히 메시지만 수정하는게 아니라 메시지 출력 로직을 분석하여 라이선스가 인증되도록 패치한다. 올리디버거에서 Search for > All referenced text strings > Search for next 기능을 이용하여 ②번 화면에 보이는
리버싱 레나 튜토리얼5 - 체험판 프로그램 패치 리버싱 레나 튜토리얼4 - 제약사항 패치https://jdh5202.tistory.com/668 위 프로그램은 체험판이라 프로그램의 실행 가능 횟수가 있고 프로그램 종료 시 광고 팝업이 뜬다. 프로그램 하단에 "Number of trials"가 실행 횟수를 나타낸다. 초록색 버튼을 클릭하거나 Enter를 누르면 프로그램이 열린다. ி 실행 횟수 제한 제거 프로그램의 시작점을 찾기 위해 Animate over(Ctrl + F8)한다. 시작점 489912에서 정지된다. 그 전에 실행 횟수 검증 부분도 포함된 것으로 보아서, 실행시점 이전에 라이선스 검증 루틴이 존재할 것으로 의심된다. 한 단계 윗 부분(004898F1)에 JLE가 있다. 먼저 이 부분을 JMP로 수정 후 실행 파일로 저장해서 확인한다. 실행..
리버싱 레나 튜토리얼4 - 제약사항 패치 리버싱 레나 튜토리얼3 - 팝업창 제거https://jdh5202.tistory.com/667 올리디버거에서 해당 프로그램 실행 도중 예외 처리 오류가 발생할 수 있기 때문에 에러를 무시하도록 설정한다. Options > Debugging options > Exceptions > Ignore 옵션 모두 체크 > Add range(00000000-FFFFFFFF) 프로그램의 제약 사항 1. 문자열 패치 프로그램 타이틀 "(UNREGISTERED VERSION)", 중앙 부분에 “This is an unregistered version … ", "Help > About PixtopainBook" 메뉴의 하단에 “Unregistered version v1.07" 등록되지 않았다는 unregistered 문자열..
리버싱 레나 튜토리얼3 - 팝업창 제거 리버싱 레나 튜토리얼2 - 라이선스 키 파일 생성https://jdh5202.tistory.com/666 (프로그램 실행화면) 레지스트리를 등록하려면 Nags 창을 삭제하라. 등록되지 않은 경우 세 번째 팝업이 뜬다. 올리디버거로 디버깅해보면 GetModuleHandleA 함수 리턴 값을 ‘0’과 비교하여 분기한다. 저 함수는 exe의 베이스 주소를 리턴하기 때문에 해당 리턴값은 ‘0’이 될 수 없다. 따라서 최종적으로 세 번째 메시지 박스가 호출된다. JE를 JMP로 바꾸고 실행하면 첫 번째 메시지 박스는 출력되지 않는다.그러나 두 번째 MsgBox는 점프가 불가하기 때문에 그 아래 MsgBox 코드 자체를 삭제한다. 1. MessageBox(3B~47)를 선택 후 우측 키 - Binary - Fill..
리버싱 레나 튜토리얼2 - 라이선스 키 파일 생성 리버싱 레나 튜토리얼1 - 라이선스 인증 우회 https://jdh5202.tistory.com/665 레나 튜토리얼 1번 문제는 분기 플래그를 수정하여 ExitProcess 회피가 가능했다. 이번 문제는 해당 방법을 사용하지 않고 라이선스 인증에 필요한 파일을 만들고 키를 찾도록 한다. 40106E - 인증 키에 관련된 파일을 암시하는 듯 하다. 해당 위치로 이동한다. 파일을 생성하고 파일을 읽는 함수가 존재한다. CreateFileA를 통과하기 위해 notepad로 임의의 "Keyfile.dat"를 만들면 파일을 읽는 함수로 이동한다. 바이너리 실행 위치에 Keyfile.dat 파일이 존재하는 경우 EAX가 -1 이외의 값으로 설정된다. keyfile.dat 파일 내용은 reverseM.0040211..
리버싱 레나 튜토리얼1 - 라이선스 인증 우회 ReversMe 프로그램 실행 시 라이선스 인증을 요구한다. 올리디버거로 프로그램 내 문자열을 모두 뽑아본다. 마우스 우측 메뉴 > Search for > All referenced text strings 40120C로 분기하게 만들면 문제를 풀 수 있을 것 같다. Ctrl + G를 눌러 해당 위치로 이동한 뒤 함수의 시작 위치를 찾는다. 401205가 함수의 시작점이므로 해당 위치로 분기하는 구문을 찾아야 한다. 문자열 검색된 처음 주소 40106E로 이동하면 파일 생성(CreateFileA) 이후에 분기 조건이 존재한다. 분기 전 CMP EAX, -1 비교 구문을 살펴보자. -1은 FFFFFFFF이며 EAX 레지스터의 값과 동일하다. CMP는 A-B로 동작하기 때문에 두 값을 빼면 0이 된다. 따라서..
IDA 메뉴 사용법 ி IDA View Graph view - 프로그램 흐름이 바뀌는걸 보여준다.( 점프 jxx 기준 ) 분기 - 참 = 초록색 화살표 - 거짓 = 빨강색 화살표 - 무조건 = 파란색 화살표 특정 함수에 도달하는 모든 경우를 그래프로 보여준다. 함수에서 호출하는 함수들을 나열한다. ➽ 보라색 상자 = 라이브러리 모든 경우의 함수 흐름을 그래프로 보여준다. user xrefs chart는 두 기능을 동시에 사용한다. depth를 -1로하면 이동 횟수에 제한 없이 전부 보여주며, externals 체크시 라이브러리함수는 안보인다. ➽ graph view 주소 보는법 option -> general -> d..