분류 전체보기 155

[reversing.kr] Easy Crack

그냥 키젠 문제.. 첫 입력값은 "12345"이다. text 검색을 통해 성공/실패 메시지를 출력하는 부분을 찾았고, 실패 메시지로 분기되는 4개의 지점에 모두 BP를 걸었다. 결과적으로 네 번의 분기점에서 key 값을 얻어내서 조합하면 된다. 첫 번째 지점에서는 CMP [ESP+5], 61으로 비교를 한다. 0x61은 아스키코드로 'a'이고, 비교할 문자는 내가 입력한 문자열 중 두 번째 문자열인 '2'이다. 따라서 key의 두 번째 문자는 'a'이다. 두 번째 입력값 "1a345". 첫 번째 분기를 지나면, "5y"와 내가 입력한 나머지 "345"를 인자로 4010C3에서 어떤 함수를 호출하고 있음을 볼 수 있다. 함수 내부로 진입해서 확인해보자. REPE CMPS 명령어를 이용해서, 두 글자를 비교..

Reversing 2020.04.06

[코드엔진] Malware Analysis 03

u_short Malware_L03(u_short * data,u_short length) { register long value; u_short i; for(i=0; i>1) ;i++) // length를 2로 나눈 값만큼 돌림 value+=data[i]; if((length&1)==1) //비트연산 => 홀수여부 value+=(data[i]16); return(~value); } 비트 연산을 해서 특정 value가 나오게 되는데, data값마다 value가 달라지게 하려는 것 같다. checksum이 맞는 것 같음. 코드 해석을 하다가 좀 이상한 것 같아서 C로 코드를 짜서 확인해봤는데.. #include unsigned short Malware_L03(unsigned short *..

Reversing 2020.04.02

[코드엔진] Advance 09

C++로 만들었다. 빠르게 name값부터 찾아줌. 이쪽에서 name,password를 검사한다. 이상한 부분이다. 입력값을 가져와서 NULL과 비교하게 만든다.. 그냥 고의적으로 꼬아놓은 부분이라고 생각되어서, 그냥 이런건 피해주면 된다. 패치해서 없애주자. 하나 더 있었는데 못보고 넘어가서 다시 패치함. 아래에도 비슷하게 비교하는 구간이 있는데 그쪽은 NULL과 비교하는게 아니라서 패치할 필요는 없다. 이상한 NULL 비교 구간을 지나면, 내가 넣어준 값인 11111의 HEX값을 EAX로 넣어준다. 그 아래에 있는 SETE BL 은 아래에서 다룰 예정. 위의 NULL 비교처럼 이상한 부분임. 그리고 그 값을 특정 값(=패스워드)과 비교한다. 패스워드 찾았음. 성공시 분기되는 곳이 여기이다.. 아무래도 ..

Reversing 2020.03.23

[코드엔진] Advance 08

Key 값이 5D88-53B4-52A87D27-1D0D-5B09 일때 Name은 무엇인가 힌트 : Name은 두자리인데.. 알파벳일수도 있고 숫자일수도 있고.. 정답인증은 Name의 MD5 해쉬값(대문자) 델파이 프로그램이다. 문제 자체는 basic에 있던 거랑 비슷하니까 그냥 일단 까보자. 일단.. 문제가 원하는 답은 두 글자 짜리인데 최소 3글자 입력하라고 한다. 이 부분 패치해주자. name = AA로 테스트. name에 따라서 key 값이 정해지는 것일텐데, 루틴이 어디 있는지부터 알아내야 함. 이번에는 name = 11로 테스트. 암호화 루틴에서 저 Key값이 어떻게 나오는지를 봐야 한다. 암호화 루틴 부분. 여기서 Key값을 만들어내는데, 위에서 본 3A02가 보인다. 저기서 4글자 잘라서 k..

Reversing 2020.03.22

[코드엔진] Advance 06

좀 많이 찝찝한 문제.. 일단 언패킹해줌 굳이 캡쳐는 안했는데 안티디버깅기법 존재함 IsDebuggerPresent라서 패치해주고 디버깅 가능한 파일로 저장해서 다시 뜯음.. 메시지박스 확인 EBP에서 유니코드로 며칠째인지를 보여줌 EBP값 덤프창에 올려서 확인. 이 값에 하드웨어 bp걸고 확인 어떤 값이 EAX로 먼저 들어가고 이 값이 EBP로 들어감. EAX가 00330031이면 EBP에 31 00 33 00 으로 유니코드로는 "1" "3" = 13이 출력되는 식인듯. 이제 이 eax값을 추적해보면 된다. 하나하나 함수를 뜯어보는데 너무 양이 많았다. 삽질도 엄청 해서 찝찝함. 근데 결국은 EAX에 일수가 기록되고, 메시지박스 출력 후에는 계속해서 비교하는 과정을 거친다. 만약 14일째라면 EAX에는..

Reversing 2020.03.22

[Ap0x] unpackme.exe 인라인 패치

인라인 패치를 해야 하는 이유 - 이 파일은 XOR연산을 이용해 암호화/복호화가 진행된다. 따라서 그냥 수정을 하게 되면 원하는 값 혹은 문자열이 나올 수 없음(XOR연산을 거치기 때문에) 따라서 이번에는 Null Padding 영역에 새로운 코드를 넣어주고 점프문으로 분기하도록 한다. 눈여겨 볼 부분: 401046주소에 있는 Checksum 계산 루프 CMP ECX, 0 JNZ 명령어를 통해 루프를 돌게 된다. [EBX]영역에서 4바이트 단위로 순차적으로 값을 읽어들여서 EDX 레지스터에 ADD 명령어로 누적시킨다. 루프가 끝나면 EBX에는 더해진 값들이 저장될 것이다. 이것이 바로 Checksum 값이 된다. Checksum 값을 확인하고, ExitProcess로 가거나, JMP문을 통해 이동하게 되..

Reversing 2020.03.22