본문 바로가기
Reversing

[Lena] Lena Tutorial 18

by 8희 2023. 5. 10.

 

프로그램을 실행하면 2byte 패치를 통해 nag 창을 없애라고 한다.

프로그램 실행 시 두 번째 창만 나오도록 패치해야 될 것 같다.

 

 

이뮤니티 디버거로 프로그램을 뜨면 바로 프로그램 실행 시에 뜨는 팝업창 메시지가 보인다.

Messagebox로 생각되는 4012BD에 직접 BP를 걸고 실행해 봤더니

예상과 다르게 BP에 걸리지 않고 nag 창이 실행이 된다. 

 

이 코드들은 실제로 동작하지 않고 분석을 방해할 목적으로 들어있는 코드로 추측된다.

 

 

해당 코드에서 조금 위로 올라갔더니 호출 함수가 두 개 있었다.

 

 

먼저 0040130F부터 살펴 봤다.

00401000번지를 EAX에 받아온 후, 이 값을 점차 증가시키면서 1byte씩 5A와 XOR 연산하고있다.

USER32.BeginPaint의 값인 00401218번지가 되면 멈추고 리턴하게 된다.

 

 

다음으로 00401011 부분을 살펴 봤다.

코드가 있지만 무슨 코드인지 알 수가 없다.

이 값들을 5A와 XOR 연산을 하기 때문에 연산 후에는 값들이 모두 바뀌어 있을 것이다. 

 

 

0040129E에서 F7로 00401011로 들어갔다.

 

 

이전의 CALL로 인해 수정된 코드 내부로 들어왔다.

코드를 보면 EDI 값을 가지고 연산들이 진행된다.

맨 처음 EDI 값을 보면 00401011로 맨 처음 코드가 실행되는 주소이다.

 

00401011 함수에서는 이전 함수인 0040130F에서 복호화 했던 코드를 가지고  

또 다른 코드를 실행함으로써 또 다른 코드를 복호화하고 있다.

 

지금 패치 중인 이 앱은 앱을 실행하면서 코드가 실행될 때, 

이처럼 코드가 복호화되고 그 복호화된 코드를 사용한다.

따라서 복호화된 코드가 아니라 암호화된 코드에서 패치를 수행해야 한다.

 

이러한 부분을 Opcode라고 한다.

* Opcode : 앞의 두 자리는 어떤 명령이 작동하는지에 대한 코드, 
뒤에 두자리는 가리키는 주소값에 따라 바뀌는 코드로서 합쳐서 명령 코드라고 부른다.  

 

앞서 말했듯이 0040100에서 5A와 XOR 연산을 하면서 복호화를 진행했다.

따라서 복호화된 Opcode를 각각 5A와 XOR 연산을 한 값으로 패치하고 

암호화된 코드에서 이 부분을 변경하면 된다. 

하 ㅁㅊ 뭔 소리야 이게...

 

원래 코드의 Opcode는 6A 00이고, 이걸 5A와 XOR 연산을 하면 30 5A이다.

그리고 패치된 코드의 Opcode는 EB 57이고, 이걸 5A와 XOR 연산을 하면 B1 OD이다.

 

 

00401011에서 Ctrl + E를 눌러서 30 5A를 B1 0D로 변경해줬다.

 

 

패치 파일을 저장한 뒤에 실행했더니 처음에 원했던 대로 두 번째 팝업 창만 떴다!

 

 

참고

https://jdh5202.tistory.com/677

https://blog.naver.com/summer_history/223098852486

https://certangsecurity.tistory.com/79

 

 

 

'Reversing' 카테고리의 다른 글

[Lena] Lena Tutorial 20  (0) 2023.05.16
[Lena] Lena Tutorial 19  (0) 2023.05.16
[Lena] Lena Tutorial 16  (0) 2023.05.10
[Lena] Lena Tutorial 15  (0) 2023.05.04
[Lena] Lena Tutorial 14  (0) 2023.05.04