0044299D . 0FBEC3 MOVSX EAX,BL //BL 은 문장길이
004429A0 > 0FB68C3E F005>MOVZX ECX,BYTE PTR DS:[ESI+EDI+5F0] //문자 1바이트 올리고
004429A8 . 33C8 XOR ECX,EAX //복호화해서
004429AA . 83F9 6E CMP ECX,6E //이레귤러 색출
004429AD . 0F84 A2000000 JE kagom.00442A55 //
004429B3 . 83C7 02 ADD EDI,2 //전부 2BYTE문이니 길이연사
004429B6 . 3BBE F4090000 CMP EDI,DWORD PTR DS:[ESI+9F4] //전체길이 와 EDI값 비교해서
004429BC .^ 7C E2 JL SHORT kagom.004429A0 //문장끝까지 검사
------------------------------------------------------------------------------------------------
004429BE > 33DB XOR EBX,EBX
004429C0 > |8B86 40440000 MOV EAX,DWORD PTR DS:[ESI+4440]
004429C6 . |8BAE EC050000 MOV EBP,DWORD PTR DS:[ESI+5EC]
004429CC . |8DBE 100B0000 LEA EDI,DWORD PTR DS:[ESI+B10]
004429D2 . |899E FC090000 MOV DWORD PTR DS:[ESI+9FC],EBX
004429D8 . |899E 20010000 MOV DWORD PTR DS:[ESI+120],EBX
004429DE . |8907 MOV DWORD PTR DS:[EDI],EAX
004429E0 . |8B8E F8810000 MOV ECX,DWORD PTR DS:[ESI+81F8]
004429E6 . |2B8E F4810000 SUB ECX,DWORD PTR DS:[ESI+81F4]
004429EC . |C1F9 02 SAR ECX,2
004429EF . |3BE9 CMP EBP,ECX
위와같은 문을 검색해서 콜문으로 아래로 내린다.
004C6088 /$ 0FBEC3 MOVSX EAX,BL
004C608B |> 0FB68C3E F005>/MOVZX ECX,BYTE PTR DS:[ESI+EDI+5F0]
004C6093 |. 33C8 |XOR ECX,EAX
004C6095 |. 880C2F |MOV BYTE PTR DS:[EDI+EBP],CL
004C6098 |. 83C7 01 |ADD EDI,1 //
004C609B |. 3BBE F4090000 |CMP EDI,DWORD PTR DS:[ESI+9F4]
004C60A1 |.^ 7C E8 \JL SHORT kagome.004C608B
004C60A3 |. 45 INC EBP //EDI는 기본적으로 1로 셋팅된상태로 넘어와서 옮겨적을시 EBP+1부터 내용존재
004C60A4 |. E8 01000000 CALL kagome.004C60AA
004C60A9 \. C3 RETN
004C60AA /$ 8B86 F4090000 MOV EAX,DWORD PTR DS:[ESI+9F4] //아랄을거치고난 길이값을 옮겨적고
004C60B0 |. 48 DEC EAX //
004C60B1 |. 8986 F8090000 MOV DWORD PTR DS:[ESI+9F8],EAX
004C60B7 |. 33FF XOR EDI,EDI //EDI 초기화하고
004C60B9 |> 0FB60C2F /MOVZX ECX,BYTE PTR DS:[EDI+EBP]
004C60BD |. 33C8 |XOR ECX,EAX
004C60BF |. 888C3E F10500>|MOV BYTE PTR DS:[ESI+EDI+5F1],CL //대부분 EDI 1로 기본셋팅된 상태인데 초기화했으니 5F0 > 5F1로 수정
004C60C6 |. 83C7 01 |ADD EDI,1
004C60C9 |. 3BBE F4090000 |CMP EDI,DWORD PTR DS:[ESI+9F4]
004C60CF |.^ 7C E8 \JL SHORT kagome.004C60B9
004C60D1 \. C3 RETN
복호화해서 이레귤러색출할때 살짝 옮겨적는다.
위 원래 함수를 살펴보면 검사후 EDX값만 빼고 죄다 수정된다.
따라서 아무 레지나 그냥 써도 되는데 저기서 EBP 값이 프리메모리를 가리키고있다. 살펴보면 청소도잘하고
낙서해도 크게 문제일어나지않는것 같더라.
ADD EDI,2 > 1 로 수정해서 상위바이트 하위바이트 다 EBP에 복호화해서 옮겨적고
아랄이 끼어들기 좋게 콜문으로 재 암호화 위와 같은방식으로 써주면된다.
어차피 XOR 해서 다시 XOR 하면 암호화되는거니 암호화에 사용되는 길이값은 아랄에서 길이보정을 해주고
그 길이값을 사용해주면 된다.
원래 함수는 이레귤러색출이지만 그냥 뭉게버렸다. 요게 어디서 문제 일으킬지 모르겠다.
_______________________________________________
0F BE C3 0F B6 8C 3E F0 05 00 00 33 C8
바이너리 검색
콜문으로 날리고 33DB 앞까지 90(NOP) 으로 채워준다.
E8 2B 78 09 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
콜문으로 받는지점
0F BE C3 0F B6 8C 3E F0 05 00 00 33 C8 88 0C 2F 83 C7 01 3B BE F4 09 00 00 7C E8 45 E8 01 00 00 00 C3 8B 86 F4 09 00 00 48 89 86 F8 09 00 00 33 FF 0F B6 0C 2F 33 C8 88 8C 3E F1 05 00 00 83 C7 01 3B BE F4 09 00 00 7C E8 C3
_______________________________________________
디버거로 열람이 어려우니 hxd 램뷰로 위치를 잡아야한다.
위에제시된 바이너리로 서치해서 날릴위치잡고 쭉내려보면 데이터에서 널문으로 변경된지점을 찾을수있으니 그곳에 받는지점 바이너리 위치잡아주면된다.
콜문 바이너리 값은 (받는지점-날리는지점-5) 계산해서 앞에 E8 뒤에 계산값 2바이트씩 끊어서 뒤에서부터 적어주면되는데
그냥 아무 실행파일 올리로 열어서 콜문 날릴 주소와 같은 위치에서 해당 콜문을 만들어서 바이너리 복사해버리는게 간편하더라는...
+텍스트출력 에러가있기때문에 NTLEA 연동해줘야한다.
+그냥하면 우클릭 좌클릭을 문자나올때마다 해줘야한다.
+픽스라인에서 %FE 번역안함을해놨는데 2바이트 변신셋팅을 해놔서 저게 먹힐런지는 모르겠다.
_______________________________________________
샘플
[NTLEA연동]절대 마지 이키! 이챠 라 해프닝! ~ 변형! 변태! 얻은 능력으로 에로 멜로 파워를 수집하라! ~ , ぜったいマジイキ!? イチャずらハプニング!~変形!変態!? 手に入れた能力でエロメロパワーを収集せよ!~
[NTLEA연동]긴 여자 고치 , 籠女の繭
- tinker.txt10.0KB
http://www.cyberworks.jp/
엔진참조
수고하셨습니다