[Delphi] WinHTTP.ResponseText 한글 깨질때

Posted by push0ebp
2014. 11. 1. 20:53 Coding/Delphi

예전에 한글 깨져서 코딩하다가만 프로젝트를 다시 살렸다. 그 땐 3일이나 삽질했었는데 후..

자꾸 깨지길래 치트엔진으로 메모리를 보니 EB 00 ?? 00 ?? EC 00 ?? 00 ?? 00 이렇게 WideString으로 되어있었다.

EB????EC????인데.. IdHttp를 써보고 UTF8Encode/Decode MultiByte<>WideChar 함수 여러개를 써봐도 안됐다 ㅠㅠ

우연히 네이버 검색 url에 %E?%??%??을 보고 URL 디코딩을 하니 출력이 잘됬다. 

너무 기쁜마음에 바로 함수를 짰다.


uses 에 IdURL 라이브러리를 추가하고 사용하자.


Function HttpEncode(ResponseText : String) : String;

var

  i,Len :integer;

  ps :PAnsiChar;

  s :String;

begin

  ps := PAnsiChar(ResponseText);

  Len := Length(ResponseText);


  for i := 0 to Len do begin

    s := s + '%';

    s := s + IntToHex(PWORD(@ps[i*2])^,2);

  end;


  Result := String(TIdURI.URLDecode(s));


end




var

  WinHttp :IWinHttpRequest;

begin

  WinHttp := coWinHttpRequest.Create;

  WinHttp.Open('GET','http://www.naver.com',False);

  WinHttp.Send('');

  WinHttp.WaitForResponse('');

  sRecv := HttpEncode(WinHttp.ResponseText);


잘 출력된다.




Cheat Engine Tutorial STEP 9 (Dissect data/structures)

Posted by push0ebp
2014. 9. 8. 22:06 카테고리 없음

중2때 쓴게 아직도..



이 튜토리얼의 문제는 우리팀을 제외한 상대팀을 말살하라 입니다.

Float 형으로 Dave의 체력을 구합시다

 


Find Out Access를 겁시다

Write가 아닌이유는

mov 는 정수를 접근할때 쓰는데 float는 FPU를 이용해 스택으로 접근해야 합니다.

그래서 fld로 로드하고 fsub fadd같은 연산을 써서 fstp로 라이팅하게됩니다.

 



 

나왔슴다 체력을 자꾸 감소시키니까 뺴는거죠? 뺴는거면 sub, fsub를 선택하고 코드을 봅시다

 



여기서 정말 유용하고 중요한 기능입니다. 

저기다 대고 Find Out instruction 을 클릭합시다.

이 기능은

Write/Access가 메모리 -> 코드(메모리에 접근하는 코드) 이라면

instruction 은 코드 -> 메모리(코드가 접근하는 메모리) 라고 보시면 되겠네요

저 코드가 접근하고 쓰는 어드레스를 다 보여줍니다.

자 저렇게 떴네요


 

fsub 에 대고 Dissect data/Strutures를 클릭합시다.

오늘 강좌에서 제일 하이라이트인 기능이지요




스샷에 잘 설명이 되어있네요 ㅎㅎ

extra address는 그룹어드레스에 대고 클릭하시면 그룹에 알아서 칸이 추가됩니다.



 

 

 

 



 

저걸 누릅시다

 

 

저기 나와있네요 이름까지 나와 있네요

이 기능은 저어드레스에 오프셋연산한 표로 비교해서 보여주는 기능입니다.

 

 




  

 

스크립트를 짜봅시다.

[ENABLE] //체크가 되었을때
alloc(MyTeam,1024) 
alloc(Die,1024) 
label(Routine

0042509D:
jmp Die // Die로 점프
nop
Routine: //nop밑 쪽을 Routne이라고 선언 합니다. 이쪽으로 점프 시킬거기 때문이지요

 

Die:
cmp [ebx+10],1//ebx+10 의 벨류와 1을 비교 왜 04 였는데 10 일까요? 답은 저 스트럭쳐 에서 +C가 나왔기 떄문이지요.

// 그래서 ebx+04+0C = ebx+10 이라고 되겠네요
je MyTeam // 같다면.우리팀이라면 MyTeam으로 점프
fsub dword ptr [ebx+04] //감소 
fstp dword ptr [ebp-30] 
jmp Routine //원래 어셈으로 이동

 

MyTeam:
fadd dword ptr [ebx+04] // 증가

fstp dword ptr [ebp-30] 
jmp Routine //원래 어셈으로 이동

 

[DISABLE] 

이걸 Tools - Auto Assemble 에 적고 Excute를 누릅시다




 

 

 

YISF 2014 순천향대 정보보호 페스티벌 예선 Write up

Posted by push0ebp
2014. 8. 31. 23:22 Hacking/CTF