|  |
| |
| 해쿨러 |
mfc120u_2262는 메세지박스를 띄우는 함수고요
mfc120u_296은 string 클래스의 constructor
mfc120u_1042는 string 클래스의 destructor
입니다 그러니까 궁금해하신 함수들은 분석대상이 아니란거죠
전 mfc를 모르기 때문에 클래스이름은 그냥 대충 역할에 맞게 썼습니다 |
2017/06/12 |
|
| ewqqw |
7704는 뭐하는 함수인가요? |
2017/06/12 |
|
| 해쿨러 |
아 제가 쓴 함수들이 아니라 7704가 궁금하다고 써놓으셨었군요 못봤습니다
7704는 문자열 복사함수가 아닐까 싶습니다
v1+192는 v1에 대한 this포인터일거고(아이다에서 char *으로 해놓긴 했지만 아마 MFC의 타입일겁니다) v1이 갖고 있는 문자열을 Str이라는 새로운 인스턴스에 복사하는게 아닐까 싶네요 디버깅해보시면 좀더 확실할것 같습니다. 아니면 단순 strcpy가 아닌 strupper, strlower등일수도 있고요 |
2017/06/12 |
|
| ewqqw |
v2 = *((_DWORD *)Str - 3); 는 확실히 무엇을 의미하나요?
생소한 표현이라 제가 해석한 바가 맞는지 모르겠네요... |
2017/06/13 |
|
| 해쿨러 |
의미는 Str이라는 포인터 변수가 가르키는 주소값에서 (sizeof(DWORD*)*3)만큼 뺀 그 주소를 디레퍼런스해 값을 가져오겠다는 뜻인데, 제 추측으로는 MFC 힙 메타데이터에서 현재 힙의 사이즈를 가져오는 방식으로 Str->size() 를 가져온게 아닐까 싶습니다. 리버싱에서는 이런식으로 추측을 하되, 추측만 하는것이 아니라 런타임에서 디버깅을 해보면서 추측을 검증하셔야 합니다 |
2017/06/13 |
|
| ewqqw |
그렇다면, 입력한 this 의 값을 v1에 저장하고, this의 값을 (v1+192)를 이용해서 Str에 저장하고,
이제 v2의 값, 즉 Str 의 SIZE가 8자리 라면(그런데 이 8자리에서는 마지막 NULL값도 들어가는 건가요?)if문이 실행이 되어서 v3에 wtoi함수를 사용해 Str의 숫자들을 저장하고(atoi와 wtoi의 차이점을 잘 모르겠습니다..만 Str에 있는 숫자를 v3에 저장한다는 것은 알겠네요) 하여튼 v3는 0이 아니므로 또다시 if문이 실행되서
이제 v3의 값을 비교하는데, 일단 10000000미만 이어야 하며, 10000으로 나누었을 때 나머지가 36이고 몫이 933 이면 v4값이 1이되어 결국 CORRECT가 뜨는 형식인거 맞나요? 그러면 결국 입력해야 하는 값은 9330036아닌가요? 그런데 입력하면 Wrong이 나오네요.. 무엇이 문제일까요? |
2017/06/13 |
|
| 해쿨러 |
글쎄요.. 이미 말씀을 드렸지만 동적분석 없이는 소스코드만 보고서는 몇개 함수의 역할도 모르는 상태에서 완전한 분석을 하기 어렵습니다. 예를들어서 지금 우리가 모르는 7704가 문자열복사가 아니라 hex string -> number를 해주는 함수일 수도 있구요 어떤 문자열의 checksum을 계산해주는 함수일 수도 있습니다. 지금 하고 계신 것은 정확하지 않은 분석에 기반해 어떤 기초적인 기반을 정리하고, 그 정리를 바탕으로 논리구조를 파악하여 해석하신건데, 전제 자체가 옳지 않을 경우 무의미한 분석을 하고 계신거죠 |
2017/06/14 |
|
| ewqqw |
아~~ 해결되었습니다~
직접 디버깅 하다 보니깐 V2가 확실히 문자열의 갯수를 저장하는 변수이네요
그런데 '문자'열 이다 보니깐
그 wtoi함수에서 숫자 7개로 인식을 해야해서
09330036이 답이네요~~ 사실 9330036뒤에 아무 문자를 써도 통과네요
감사합니다~~ |
2017/06/14 |
|