ARM 파일인데 IDA 정적분석으로 충분히 풀 수 있는 문제이다. 분석 자체는 쉬운데 코드를 짤 때, 타입 선언이랑 초기화를 제대로 안해줘서 삽질을 했던 문제이다. reversing.kr HateIntel 풀이 Wrong/Correct 문자열이 사용되는 함수로 가보면, 아래와 같이 v1에 key값을 입력받고 sub_232C를 호출한 후에 입력받은 key값 길이만큼 반복문을 돌며 연산 값을 byte_30040 배열과 비교하고 있다. 한바이트라도 같지 않으면 Wrong Key!가 뜨게 된다. byte_3004는 총 29바이트이기 때문에 입력 key값의 길이가 29바이트여야 한다는 것을 알 수 있다. sub_232C를 살펴보면, 아래와 같이 반복문 내에서 입력 key값 한바이트씩 인자로 넘겨 sub_2494를..
먼저 복호화 루틴을 찾고, original 파일이 왜 주어졌는지 생각해보면 문제를 풀 수 있다. 그리고 ror rol이나 하위 레지스터 bh 등 사용때문에 인라인 어셈코드 작성이 필수이다. reversing.kr 중반쯤으로 넘어가면서 문제가 점점 어려워지고 있어서 한문제를 푸는데 시간이 오래걸리고 있는데 그만큼 도움이 많이 되는 것 같고 풀었을 때 뿌듯해서 좋다. reversing.kr PEPassword 풀이 original.exe를 실행시켜보면 "~ Password is ????????????" 메시지 박스가 나오고 packed.exe를 실행시켜보면 Password Check로 입력값을 받고 있다. 원본파일이든 패킹된 파일이든 메모리에서의 실행코드는 같기 때문에 실행 결과?가 같아야되는데 다른것을 보..
CHSOP은 닷넷 디컴파일툴을 사용해서 풀어야 하는 문제이고 나같은 경우 정적분석만으로는 문자열 배합 방법을 모르겠어서 소스 수정이 불가피했다. reversing.kr CSHOP 풀이 CSHOP.exe를 실행시켜보면, 아래와 같이 빈 창이 뜬다. 일단, CSHOP은 닷넷 프로그램이기 때문에 IDA로는 분석이 불가하고 닷넷 디컴파일 툴이 필요하다. CodeEngn을 풀 때, 닷넷 프로그램이 한번 문제로 나온적이 있어서 그때 사용했던 dotPeek을 사용하기로 했다. 먼저 FrmMain을 살펴보면, 첫번째로 눈에 띄는 것은 _Click 함수에 특정 문자열이 저장되어 있다는 것이다. 정답값은 아니었다. 그리고 바로 위에 Form1_Load 함수가 있는데 문자값들이 비어있다. 폼로드라는 함수이름 특성 상, 어떤..
이번 문제는 오토핫키 실행파일에서 key값들을 찾아내는 문제로, CRC 체크하는 부분을 하나하나 우회해주어야 되는 문제인 줄 알고 하루 온종일 삽질했던 문제이다. reversing.kr AutoHotkey1 풀이 주어진 오토핫키 실행 파일을 실행시켜보면, 아래와 같이 무언가 입력값을 받고 있다. 먼저 오토핫키에 대해 아주 간단히 살펴보면, 오토핫키는 매크로 프로그램 중 하나이다. 오토핫키 스크립트 확장자는 .ahk이고 오토핫키 프로그램을 설치하면 Compiler 폴더의 Ahk2Exe를 사용해서 ahk를 exe로 컴파일하게 된다. 그리고 컴파일된 exe파일은 원래라면 아래와 같이 RCdata 부분에서 평문 스크립트를 확인할 수 있다. 이때, 디컴파일을 막기 위해 패스워드를 따로 지정해서 컴파일을 하는 경우..
드라이버 파일이 같이 주어진 만큼, 이번 기회에 Windbg로 커널 디버깅 하는 연습을 해보려고 했는데 결국 제대로 실행시키는데 실패해서 IDA로 겨우겨우 풀었다. reversing.kr WindowsKernel 풀이 관리자 권한으로 실행시키면, StartService 관련 에러가 발생한다. StartService에 대한 에러코드를 보기위해 간단히 코드를 짠 후 어떤 에러인지 봤는데, 에러코드 0x4fb (1275)로 ERROR_DRIVER_BLOCKED 에러이다. #include #include int main() { SC_HANDLE schSCManager = NULL; SC_HANDLE schService = NULL; char* Filename = "C:\\Users\\leefo\\Desktop\..
초반에 문제들만 Easy가 붙은 줄 알았는데 중간에 쉬어가라는 문제인지 Easy ELF 문제가 있다. 문제 이름대로 정말정말 쉬워서 푸는데 15분 컷이 가능했다. 지금까지 푼 문제중에서는 제일 쉬운 것 같다(+Easy Crack). reversing.kr Easy ELF 풀이 처음에는 아무래도 ELF인 만큼 gdb로 풀어야 하는 줄 알았다. 실행시키고 입력값을 주면, 'Wrong'이 출력된다. 그런데 심볼이 없어서 디버깅하기가 힘들었기 때문에 그냥 IDA로 보기로 했다. main함수를 보면 Wrong으로 분기하는 조건으로 sub_8048451의 리턴값을 확인하고 있다. sub_8048451을 헥스레이로 봐보면, 0x804A020이 첫번째자리 값이라는 것은 사실 추론이긴 하지만... 간단한 xor 연산으로..
Twist1은 여러 안티디버깅 기법을 확인할 수 있는 문제인데 안티디버깅 플러그인도 안먹히고 코드가 중간중간 풀리는게 많아서 bp도 여러곳에 걸어주어야 하고 게다가 왜인지는 모르겠지만, OEP를 찾은 후 덤프를 떠주고 진행했는데 중간에 빠진 코드가 있어서 이것 때문에 삽질 시간이 더 길어졌다. 겨우 전부 우회를 한 후에도 키젠 부분에 페이크가 많아서 풀다보면 굉장히 지치는 문제이다. 확실히 푼사람 수가 확 줄어든 것을 보니 인내심을 충분히 갖고 풀어야 하는 문제인 것 같다. reversing.kr Twist1 풀이 이번 문제는 Windows x32 환경에서 풀어야 하는 문제로 Twist1.exe를 실행시키면 Input 값을 받고 있다. 일단, 패킹이 된 것인지? IDA로 디컴파일이 잘 안된다. pusha..
PE 구조를 생각하고 풀면 좋은 문제이다. reversing.kr ransomware 풀이 이번문제는 랜섬웨어 문제이다. 설마 뭐 진짜 내파일을 암호화할꺼라고 생각하진 않았지만 혹시 모르기 때문에 그냥 가상환경에서 진행했다. run 파일을 실행시키면 아래와 같이 zip파일에 들어있던 파일 file을 암호화했다고 협박(?) 메시지가 나온다. 처음에 key 문자열이 쓰인 함수를 찾아서I 보는데 함수 시작 부분에 아래 반복 코드가 엄청 크게 있다. 뭔가 했는데 그냥 파일 크기를 키우고 혼선?을 주기 위함인 것 같으니 딱히 신경쓰지 않아도 문제 풀이에는 지장이 없다. 위 코드를 빼면 함수 자체는 별로 크지 않다. 반복문이 계속 나오게 되는데 첫번째 반목문에서는 암호화된 file 데이터를 1바이트씩 가져와서 0x..
CodeEngn부터 reversing.kr Position 문제까지는 2017년에 작성해놨던 풀이를 옮겼던 것인데 (새로풀면서 거의 풀이가 바꼈지만) Direct3D FPS부터는 지금부터 틈틈히 새로 풀 예정이다. 계속 리버싱을 해왔던 것은 아니지만... 2017년에는 이 문제를 못풀었었는데 이번엔 풀 수 있게된 것을 보니 그래도 어느정도는 발전했나보다 :D reversing.kr Direct3D FPS 풀이 이번 문제 zip에는 간단한 FPS 게임 파일과 data 폴더, D3DX9_43.dll 이 들어있다. 문제가 무엇인지 안나와있어서 무얼 해야하는 것인지 감이 오지 않기 때문에 일단 맵을 좀 살펴보기로 했다. 좀 더 들어가니 제작자가 카라 한승현 팬인지 한승현 사진과 걸어다니는 고구마들이 있다. 총을..
Position 문제부터는 elf를 제외하고는 푼 수가 1000이하로 떨어진다.. 확실히 Position부터는 좀 문제가 까다로워지는 것 같은게 input name으로 serial을 생성하는 과정이 좀 복잡해서 코드 짜기가 좀 헷갈렸다. reversing.kr Position 풀이 Position.exe를 실행시키면 다음과 같이 Name과 Serial을 입력받는다. 키젠 문제답게 시리얼이 주어지고 그에 맞는 Name값을 구해야 하는 문제이다. 친절하게 ***p 라고 알려주며 끝자리 p와 총 길이가 4임을 알려주었다. Position 창에서 "Wrong"이라는 문자열이 있었으므로 해당 문자열이 사용되는 함수로 먼저 가본다. 참고로 Wrong은 유니코드로 저장되어 있기 때문에 IDA 문자열 보기(Open S..
문제의 의도대로 정확하게 분석해서 푼듯한 느낌은 안들지만 rsrc 섹션 데이터를 확인하는 순간 풀 수 있는 문제이다. 봐야겠다는 생각을 늦게하긴 했지만... reversing.kr ImagePrc 풀이 ImagePrc.exe 를 실행시킨 후 Check를 누르면 틀렸다는 메시지창에 나온다. Wrong 문자열이 사용되는 함수로 먼저 가보자. Wrong 창이 출력되는 블록을 보면 딱 한가지 경로밖에 없는데 처음 함수 시작에서 빨간네모박스 분기를 타는 것이다. 처음 분기에서 왼쪽 분기를 타게 되면 무조건 Wrong 출력되는 곳으로 가기 때문에 파란색 분기를 대안으로 생각할 수 있다. 제일 정답에 가까워보이는 분기는 왼쪽 파란색 네모 분기를 타는 것인데 그럴려면 ecx가 0x1이어야 한다. 그래서 ecx가 무조건..
정형화된 유형의 키젠만 풀어봤기 때문에 뇌정지가 왔던 문제이다. reversing.kr Replace 풀이 Replace.exe는 입력값을 받아서 check하는 심플한 프로그램이다. 언제나 그렇듯, 먼저 체크 루틴에서 사용되는 문자열이 사용되는 함수로 가보았다. 이번 문제는 특이한게, Correct로 가는 분기가 아예 없다. 정답값 인증이 입력값인 경우밖에 생각할 수 없으므로 입력한 입력값을 알맞게 주면 그게 ~~~ 되어 뭔가 Correct 분기를 탈 수 있게 만들어야 하는 문제인 것 같다. 함수가 별로 크지 않으므로 트레이싱 하면서 봐보자. 참고로 이번 파일은 IDA가 틀리게 디컴파일한 부분이 많아서 동적으로만 보려고 한다. 입력값을 123(0x7B)으로 주고 입력값을 입력받아서 eax에 저장하는 Ge..