리버스 엔지니어링 29

HackCTF Reversing Keygen Write Up

https://ctf.j0n9hyun.xyz/challenges HackCTF Do you wanna be a God? If so, Challenge! ctf.j0n9hyun.xyz 이 문제를 IDA로 열어보도록 하겠습니다. 아마도 check_key의 값이 참이면 플래그를 출력하는 프로그램인 것 같습니다. 입력한 문자열의 길이가 9자 이상 64자 미만이어야 합니다. 그리고 입력한 문자열을 encoding이라는 함수를 통해서 값을 바꿔준 후에 "OO]oUU2U

HackCTF Reversing Strncmp Write Up

https://ctf.j0n9hyun.xyz/challenges HackCTF Do you wanna be a God? If so, Challenge! ctf.j0n9hyun.xyz 문제 파일을 IDA로 열고 main함수를 확인해보겠습니다. 입력을 받고 4F~7A와 비교를 해서 같으면 "Good game"이 출력되고 아니면 "Always dig deeper"를 출력하는 것으로 추정됩니다. 이제 strcmp_함수에 들어가서 자세히 분석해보겠습니다. strcmp_함수를 디컴파일한 코드입니다. v3이라는 변수가 있는데 딱히 하는 일은 없는 것 같습니다. 중요한 건 입력한 문자열이 들어있는 a1을 key라는 변수의 값과 XOR연산한다는 것입니다. XOR연산을 마친 a1의 값과 a2에 들어있는 문자열이 같으면 성..

HackCTF Reversing Handray Write Up

https://ctf.j0n9hyun.xyz/challenges HackCTF Do you wanna be a God? If so, Challenge! ctf.j0n9hyun.xyz 이 문제는 이름이 이름인 만큼 바로 IDA로 열어보았습니다. 이것이 이 프로그램의 구조입니다. 주목할 부분은 40058D주소로 가면 실패메시지가 뜨게 되는데 main함수에서 rbp+var_4 주소에 1을 넣고 0과 비교를 해서 다르면 40058D로 점프합니다. 점프를 하지 않으면 400571과 400544를 왔다 갔다 하게 됩니다. rbp+var_8의 값을 카운터로 사용하는데 0x1E라는 값을 넣어주고 작거나 같을 때 점프하는 jle명령어가 있으므로 31번 동안 반복한다는 것을 알 수 있습니다. 400544는 string과 ..

HackCTF Reversing Reversing Me Write Up

https://ctf.j0n9hyun.xyz/challenges HackCTF Do you wanna be a God? If so, Challenge! ctf.j0n9hyun.xyz 이 문제는 C언어로 짜인 코드를 줍니다. #include #include int main() { int i; char *serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}"; char enter[54]; printf("키를 입력하시게 : "); scanf("%s", enter); if (strlen(enter) == strlen(serial)) { for (i = 0; i < strlen(serial) && (enter[i] ^ (i % 2)) == serial[..

HackCTF Reversing Welcome_REV Write Up

https://ctf.j0n9hyun.xyz/challenges HackCTF Do you wanna be a God? If so, Challenge! ctf.j0n9hyun.xyz 문제를 다운로드하고 실행해보겠습니다. exe파일이 아니라서 그런지 실행이 안 됩니다. HxD로 열어보겠습니다. 성공메시지와 실패메시지, 그리고 의심스러운 문자열이 보입니다. 의심스러운 문자열을 찾기는 했지만 플래그는 아닌 것 같아서 고민을 하다가 검색의 도움을 받아서 풀어보았습니다. 이 문자열은 Base 64라는 방식으로 인코딩 된 문자열인데 Base 64로 인코딩된 문자열의 특징은 끝이 "="으로 끝난다는 것입니다. 이제 이 문자열을 디코딩하면 답이 나오게 됩니다. 답:HackCTF{w3lc0m3_70_r3v3r51n6_w..

CodeEngn Basic RCE L04 Write Up

문제:이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가 https://ch.codeengn.com/ CodeEngn.com [코드엔진] 코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 세미나, 워크숍을 현업 실무자들과 함께 운영하고 있는 비영리 커뮤니티입니다. ch.codeengn.com 일단 Ollydbg로 문제를 열어보기 전에 실행시켜보겠습니다. 약 1초에 한 번씩 정상을 출력합니다. 이제 Ollydbg로 이 문제를 열어보겠습니다. F9로 실행시켜보니 정상이 아니라 디버깅 당함이 출력됩니다. 저는 여기서 CodeEngn Basic RCE L01문제가 떠올랐습니다. 그 문제는 GetDriveTypeA라는 함..

CodeEngn Basic RCE L03 Write Up

문제:비주얼베이직에서 스트링 비교함수 이름은? https://ch.codeengn.com/ CodeEngn.com [코드엔진] 코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 세미나, 워크숍을 현업 실무자들과 함께 운영하고 있는 비영리 커뮤니티입니다. ch.codeengn.com 사실 이 문제는 검색으로도 답을 충분히 찾아낼 수 있지만 Ollydbg를 이용한 분석으로 답을 구해보겠습니다. 일단 Ollydbg로 분석하기 전에 프로그램을 실행시켜줍니다. 실행해보면 이렇게 오류가 발생합니다. MSVBVM50.DLL을 다운로드하고 진행하겠습니다. 드디어 실행을 시키면 이런 창이 뜹니다. 확인을 눌러보겠습니다. 패스워드를 입력하는 창이 뜹니다. 아무 문자열이나 넣어보겠..

CodeEngn Basic RCE L02 Write Up

문제:패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇인지 분석하시오 https://ch.codeengn.com/ CodeEngn.com [코드엔진] 코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 세미나, 워크숍을 현업 실무자들과 함께 운영하고 있는 비영리 커뮤니티입니다. ch.codeengn.com 파일이 손상되었다고 합니다. 일단 문제를 실행시켜보겠습니다. 이런 창이 뜨면서 실행이 안 되는 모습입니다. Ollydbg로 열어보겠습니다. Ollydbg로 프로그램을 열려고 하면 에러창이 뜨면서 실행이 안 됩니다. 이 문제는 파일이 손상되어서 실행이 안 되기 때문에 Ollydbg를 이용한 동적 분석을 할 수 없습니다. 그래서 ..

CodeEngn Basic RCE L01 Write Up

문제:HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가 https://ch.codeengn.com/ CodeEngn.com [코드엔진] 코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 세미나, 워크숍을 현업 실무자들과 함께 운영하고 있는 비영리 커뮤니티입니다. ch.codeengn.com 문제를 다운로드하고 압축을 풀어주었습니다. 파일의 압축을 풀 때 암호는 codeengn입니다. 이제 실행시키면 이런 창이 뜹니다. 확인을 눌러주면 이런 창이 뜹니다. 이제 어느정도 이 문제에 대한 정보를 얻었으니 Ollydbg로 이 문제를 열어보겠습니다. 첫 번째로 MessageBoxA함수를 호출하는데 함수의 이름을 통해서 ..