2012-04-29 7 views
0

System.Random 클래스를 사용하는 소프트웨어를 모니터링하고 싶습니다.
나는 수 있도록하고 싶습니다 :

1/모든 임의의 인스턴스의 생성을 모니터링 할 수
2/
또는 2bis/내 자신의 임의
C# 후크 : System.Random

에 임의의 결과를 강제로이 인스턴스에서 사용 씨를 강제

다른 컴퓨터에서도 항상 동일한 동작을하는 소프트웨어가 필요하므로 통신하는 자체 소프트웨어를 더 잘 테스트 할 수 있습니다.

EasyHook의 튜토리얼을 읽었지만 클래스 작성이나 클래스 메소드 후킹이 아닌 함수 후킹 만 언급 한 것 같습니다.

+0

나는 후회할 것입니다. "하지만 왜 System.Random 클래스에 '후크'를 걸고 싶습니까?" 결코 그것을 보길 원하지 않는 사람을 보거나 들었습니다 ..... –

+2

난수 생성을 가로 채어 특정 소프트웨어를 게임에 사용하려고합니까? –

답변

4

.NET 프레임 워크는 메서드 호출을 후킹하는 좋은 메커니즘을 제공하지 않습니다. just-in-time 컴파일러와 ngen.exe prejitter는 구현하기가 불가능합니다. 이 방법의 주소를 얻는 좋은 방법이 없으며 간접 점프 없이도 코드를 패치 할 수 있습니다. 예를 들어, EasyHook과 같은 창녀가 사용하는 DLL 가져 오기 테이블에있는 점프의 종류가 다릅니다.

전에 앞에 지터가 있어야합니다. 또한 PostSharp와 같은 Aspect Oriented Programming 도구가이를 수행합니다. IL rewriters는 코드를 실행하기 전에 어셈블리를 수정합니다. 따라서 체계는 IL의 System.Random에 대한 호출을 메서드 호출로 바꿉니다. 그리고 어셈블리에 종속성을 추가하십시오.

"IL 다시 작성"은 구현을 찾는 좋은 Google 검색어입니다.

0

"IL 재 작성"비록이 KERNEL32에 GetTickCount()를 부르고 경우에 감지하고 기본 인스턴스 생성을 변경 할 수 있습니다, 여기 당신의 최선의 선택이 될 것 같다 :

public Random() : this(Environment.TickCount) 
{ 
} 

정말 알 수없는 경우 환경 .TickCount는 실제로 GetTickCount()을 호출합니다. 그러나 그것은 plausible입니다.