보통 아랄디버거로 찾으면 원문초과로 번역문이 짤려 나갑니다.

이유는 잘아실꺼라 생각되지만 길이 체크하는 부분이 있기 때문입니다.

QLIE처럼 친절하게 앞부분에 있는 것도 아니고 ebp-8에 있던군요. 이걸 길이수정해도 안되길래...쭉 찾아보니

"lstrlenA" 함수를 사용해서 길이를 계산해서 사용하더군요.

이함수에 사용되는 문장또한 출력엔 지장 없기에 이곳을 지점으로 삼았습니다.

대사 길이 뽑는 곳이 두곳이 있으니 수정해가면서 확인하시면 됩니다. 한곳은 원문 길이 초과하도록 수정해도 적용이 안되는걸로 보입니다. 반대로 원문 길이를 줄이는건 가능했습니다. 이쪽에서 헤매고 있어서 삽질좀 했다는....


0128AC80 /$ 55 PUSH EBP
0128AC81 |. 8BEC MOV EBP,ESP
0128AC83 |. 81EC 30080000 SUB ESP,830
0128AC89 |. A1 F0712F01 MOV EAX,DWORD PTR DS:[12F71F0]
0128AC8E |. 33C5 XOR EAX,EBP
0128AC90 |. 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
0128AC93 |. 56 PUSH ESI
0128AC94 |. 898D DCF7FFFF MOV DWORD PTR SS:[EBP-824],ECX
0128AC9A |. C745 FC 00000>MOV DWORD PTR SS:[EBP-4],0
0128ACA1 |. C745 F0 00000>MOV DWORD PTR SS:[EBP-10],0
0128ACA8 |. C745 EC 00000>MOV DWORD PTR SS:[EBP-14],0
0128ACAF |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]        // [EBP+8]에 있는 문장을 EAX로(이곳을 후킹지점으로 삼음.)
0128ACB2 |. 50 PUSH EAX                                                                       // EAX에 있는 문장을 ESP로
0128ACB3 |. FF15 20712E01 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] // 길이계산후 EAX에 넣어둠.
0128ACB9 |. 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX                           // EAX에 있는 길이값을 [EBP-0xC]로 옮김
0128ACBC |. C745 F8 00000>MOV DWORD PTR SS:[EBP-8],0

후킹할 지점은 lstrlenA함수를 호출하기 전이나 쿨문에 걸면 됩니다. 그러면 번역된 문장으로 알아서 길이를 계산하게 됩니다.