그러타.

나는 미스터 로봇 시즌1을 다본 사람이다.

미스터 로봇 시즌1이 끝날때 마지막 부분에 아쉽게 끝내서 아쉬워하던 도중

어제 미스터 로봇 시즌 2가 나왔다는 소리를 들었다.


 

오.. 세상에 7월 13일에 나왔다니.


현재는 3화까지 나와있다.


아니 근데 여기서 왜 미스터 로봇이 롸이트업에 들어가있느냐~!?


바로 미스터 로봇에 숨겨진 이스터 에그가 있었다.



바로 이 장면에 나타나는 모니터에 있었다.



이 장면은 tool을 이용하여 랜섬웨어를 생성하는 장면이였는데.


수상한 아이피를 발견할 수 있었다.


192.251.68.254:80에 랜섬웨어가 배포되는 것처럼 느껴진다.


그리고 실제로 접속이 되는지 확인을 해보았다.



실제로 접속이 되고 헤더 중 Location을 발견할 수 있는데,

http://i254.bxjyb2jvda.net/에 리다이렉트가 되는 것을 발견할 수 있었다.



마지막으로는 http://i239.bxjyb2jvda.net 로 이동을 하게 된다.



실제로 접속해보면 이러한 페이지가 나타난다.

타이머로 시간이 가고 있고 요상한 페이지였다.



또로롱


그리고 web_analytics.js 라는 수상한 스크립트를 발견할 수 있었다.


web_analytics.js 코드는 아래와 같다.



/* analytics */

var AdobeTracking = new Object();

AdobeTracking.division = 'Cable';

AdobeTracking.businessUnit = 'USA Network';

AdobeTracking.contentGroup = 'Drama';

AdobeTracking.contentType = 'Home';

AdobeTracking.pageName = 'Mr. Robot : S2 Easter Egg Sites : Ransomware : Home';

AdobeTracking.showSite = 'Mr. Robot';

var q='PGRpdiBjbGFzcz0ib3ZlciI+PGRpdj4iSSBzaW5jZXJlbHkgYmVsaWV2ZSB0aGF0IGJhbmtpbmcgZXN0YWJsaXNobWVudHMgYXJlIG1vcmUgZGFuZ2Vyb3VzIHRoYW4gc3RhbmRpbmcgYXJtaWVzLCBhbmQgdGhhdCB0aGUgcHJpbmNpcGxlIG9mIHNwZW5kaW5nIG1vbmV5IHRvIGJlIHBhaWQgYnkgcG9zdGVyaXR5LCB1bmRlciB0aGUgbmFtZSBvZiBmdW5kaW5nLCBpcyBidXQgc3dpbmRsaW5nIGZ1dHVyaXR5IG9uIGEgbGFyZ2Ugc2NhbGUuIjwvZGl2PjxkaXYgY2xhc3M9ImF1dGhvciI+LSBUaG9tYXMgSmVmZmVyc29uPC9zcGFuPjwvZGl2PjwvZGl2Pg==';

AdobeTracking.showSiteFeatureII = 'Mr. Robot : S2 Easter Egg Sites : Ransomware';

function fire_beacon() { return window.atob(q); }

AdobeTracking.showSiteFeature = 'Mr. Robot : S2 Easter Egg Sites';

function fire_beacon_final(periods) { if ($('.over').length > 0) { AdobeTracking.pageName = 'Mr. Robot : S2 Easter Egg Sites : Ransomware : Countdown Ended'; _satellite.track('virtPageTrack'); }}

$(function () { var austDay = new Date(); austDay.setSeconds(austDay.getSeconds() + 86394 /*86394*/); $('#defaultCountdown').countdown({until: austDay,expiryText: fire_beacon(),onTick: fire_beacon_final, tickInterval: 1});});

_satellite.pageBottom();



뭐 그 뒤는 저 base64 인코딩된 문자열을 디코딩을 해보면.



라는 문자열을 발견하게 된다.


I sincerely believe that banking establishments are more dangerous than standing armies, and that the principle of spending money to be paid by posterity, under the name of funding, is but swindling futurity on a large scale.

- Thomas Jefferson


아마 나중에 나올 스토리와 연관이 있는 것 같다.

기대된다 ... !

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[Pwnable.kr] input - 4 pt  (0) 2017.01.04
[Pwnable.kr] cmd2 - 9 pt  (0) 2016.10.05
[ReverseLab 스터디] [Abex's CM] Abex 1~5  (0) 2016.07.11
[Pwnable.kr] dragon - 75 pt  (0) 2016.06.25
[Codegate2016] Write ups  (372) 2016.03.18

Abex Crack Me 

리버싱을 공부해본 적이 있는 사람들이라면 한번은 꼭 봤을 듯한 크랙미 시리즈이다.
출처는 어디인지 모르지만 아마도 Abex라는 사람이 올린걸 유추할 수 있다.

Abex Crack Me 1

먼저 분석을 위해 이 프로그램이 어떻게 돌아가는 지를 확인해볼 필요가 있다.



나의 하드디스크를 CD-Rom으로 인식하게 만들어보란다.

하지만 당연히 내 하드디스크는 CD-Rom이 아니므로 저런 메세지는 당연하지만 ...



어셈 코드가 졸라 짧으므로 분석이 매우 쉽다.

GetDriveTypeA 함수는 지정한 disk가 어떤 형태의 저장소인지 판단을 하는 함수이다.

kernel32에 있는 함수이며, 함수가 실행되면 특정 정수 값을 리턴하는데 해당 값에 따라 디스크의 유형을 판단할 수 있다.


 상수

 값

 설명

 DRIVE_UNKNOWN

 0

 알 수 없음

 DRIVE_NO_ROOT_DIR

 1

 최상위 경로가 없음

 DRIVE_REMOVABLE

 2

 이동형 저장장치

 DRIVE_FIXED

 3

 고정형 저장장치

 DRIVE_REMOTE

 4

 네트워크 드라이브

 DRIVE_CDROM

 5

 DVD/CD-ROM 유형

 DRIVE_RAMDISK

 6

 램 디스크


그렇습니다.

아마 그렇다면 저 함수가 실행되고 eax 레지스터에는 3이 들어가있겠네요!



그리고 실제로 3이 들어간 것을 볼 수 있습니다.


하지만 저희는 CD-ROM으로 인식하게 해야되기 때문에 저 eax 값엔 원래는 6이 리턴이 되어야됩니다.


하지만 그 값들은 여기서 요상한 연산을 하고 eax랑 esi랑 비교를 하여 같을 경우에 CD-ROM으로 인식했다고 조져따 라고 메세지를 띄웁니다.

고로 저는 다 필요없이 비교 부분에 서로 같은 것을 비교하게 조져버렸습니다.



ㅅㄱ



Abex Crack Me 2



먼저 이 문제는 흔하디 흔한 키젠 문제인 것 같습니다.

분명히 이름을 통해 시리얼키가 생성이 되고 그 생성된 키와 체크하는 것이라고 예상을 할 수 있겠습니다.


디버깅 ㄱㄱ



이 부분에서 eax에 리턴 값이 들어가고 그 ax 끼리 test 연산을 하고 시리얼이 틀렷는지 맞는지 확인을 하므로

vbaVarTstEq가 서로 비교하는 함수라는 것을 알 수 있습니다.


그렇게 내부로 들어가보면.



실제로 비교하는 것을 알 수 있었습니다.



차곡차곡 쌓인 것을 볼 수 있습니다.



00000008

0018F40C

00298784  UNICODE "CCD9C6C9"

0018F3C4


00000008

0018F40C

0029886C  UNICODE "123456789"

0018F3C4



CCD9C6C9과 제가 입력한 값을 비교합니다.



ㅅㄱ링딩동


그리고 시리얼 생성하는 부분을 분석을 하고 키젠을 만들어봤다.


def keygen(name):

key = ''

for i in range(4):

key += chr(ord(name[i])+0x64).encode("hex")

return key.upper()


Abex Crack Me 3




실행을 해보면 이러하다.

아마도 그렇다면 예상 시나리오는.

키 파일이라는 걸 생성해서 그 키 파일에서 내용을 읽고 체크하는 문제일까 하고 생각을 해보았다.


뭐 이런 생각은 디버깅을 하고 난 뒤면 꼼짝 못해~!



뭐 코드도 짧으니 금방 분석이 가능하시겠다.

메세지 박스를 띄우고 abex.l2c를 읽기모드로 연다.

하지만 당연히 eax에는 이 파일이 없기때문에 FFFFFFFF을 리턴하고 저 eax 비교에서 분기되서 파일을 찾을 수 업써!! 라고 메세지를 띄우게 된다.

고로 프로그램이 있는 경로에 저 파일을 생성해주자.



ㅇㅋ


그렇다면 파일을 찾았기 때문에.

아마 파일 찾는 분기에서는 걸리지 않을 것이다.


그 다음은 파일의 사이즈를 리턴하여 그 사이즈가 12가 아닐 경우에는 틀린 키 파일이라면서 찡찡거리게 된다.

고로 사이즈를 0x12(18)로 맞추고 실행을 해주면 풀릴 것 이다.



Abex Crack Me 4



그렇다.

이 문제는 버튼이 비활성화가 되있다...


고로 디버깅 ㄱ



현재 날짜들을 구해와서 mul, add연산을 통해 시리얼이 완성된다.



이렇게 eax에 시리얼이 들어있는 것을 볼 수 있다.


이게 시리얼인지 확인하는 방법은 vbacmp 함수를 확인하면 된다.



입력한 값과 시리얼을 비교하는 것을 볼 수 있다.


그리고 같을 경우 가입이 활성화된다.


Abex Crack Me 5



L2C-57816784-ABEX가 시리얼이다. 

끝.


'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[Pwnable.kr] cmd2 - 9 pt  (0) 2016.10.05
Mr.Robot Season2 Easter Egg  (0) 2016.07.21
[Pwnable.kr] dragon - 75 pt  (0) 2016.06.25
[Codegate2016] Write ups  (372) 2016.03.18
[Pwnable.kr] cmd1 - 1 pt  (0) 2015.10.07


코드게이트_2016_Write_Up_문승현.pdf




Hello, 

i sense that didn't written in Writeup

hmm... but have name in the file name

it's okay 

maybe lol..

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[ReverseLab 스터디] [Abex's CM] Abex 1~5  (0) 2016.07.11
[Pwnable.kr] dragon - 75 pt  (0) 2016.06.25
[Pwnable.kr] cmd1 - 1 pt  (0) 2015.10.07
[Pwnable.kr] lotto - 2 pt  (0) 2015.10.07
[Pwnable.kr] blackjack - 1 pt  (0) 2015.10.06

+ Recent posts