2016-06-19 8 views
-2

私は現在、学校で8051を使っています。私はx86で作業しています。今私はゲームを逆行させて、アドレスにアクセスしようとしています。問題は、アドレスはxordです。ノーマル私は簡単にキーを見つけることができます。 しかし、今私はちょっと混乱していて、Xorキーを見つけることができません。 誰かが今何をやっているのか説明できますか?私は、キーを構築しようとしました:IDAのX86を逆転させ、オブジェクトへのPtrのXorキー

.text:0052DCF5     mov  ecx, [esi+0D2164h] <--- esi is a pointer to an instance of what they call objectmanager 
.text:0052DCFB     mov  [esp+1Ch+var_18], ecx 
.text:0052DCFF     mov  dl, byte ptr [esp+1Ch+var_18+2] 
.text:0052DD03     mov  al, byte ptr [esp+1Ch+var_18+3] 
.text:0052DD07     xor  byte ptr [esp+1Ch+var_18+1], 0DEh 
.text:0052DD0C     xor  cl, 0ECh 
.text:0052DD0F     xor  dl, 0D2h 
.text:0052DD12     xor  al, 0Fh 
.text:0052DD14     xor  cl, 1 
.text:0052DD17     xor  dl, 1Fh 
.text:0052DD1A     not  al 
.text:0052DD1C     mov  byte ptr [esp+1Ch+var_18], cl 
.text:0052DD20     mov  byte ptr [esp+1Ch+var_18+2], dl 
.text:0052DD24     mov  byte ptr [esp+1Ch+var_18+3], al 
.text:0052DD28     cmp  [esp+1Ch+var_18], 0 
.text:0052DD2D     jz  short loc_52DD46 
.text:0052DD2F     push 6EBh 

私が一部見た::

.text:0052DD07     xor  byte ptr [esp+1Ch+var_18+1], 0DEh 
.text:0052DD0C     xor  cl, 0ECh 
.text:0052DD0F     xor  dl, 0D2h 
.text:0052DD12     xor  al, 0Fh 
.text:0052DD14     xor  cl, 1 
.text:0052DD17     xor  dl, 1Fh 
.text:0052DD1A     not  al 
.text:0052DD1C     mov  byte ptr [esp+1Ch+var_18], cl 
.text:0052DD20     mov  byte ptr [esp+1Ch+var_18+2], dl 
.text:0052DD24     mov  byte ptr [esp+1Ch+var_18+3], al 

をそして、このように行くことを試みた

^ 0xCDDEED); 

は、ここでその間違ったコードがあるようです。

.text:0052DD1C     mov  byte ptr [esp+1Ch+var_18], cl <-- Key 3 = .text:0052DD0C     xor  cl, 0ECh 
.text:0052DD20     mov  byte ptr [esp+1Ch+var_18+2], dl <-- Key 2 = .text:0052DD0F     xor  dl, 0D2h 
.text:0052DD24     mov  byte ptr [esp+1Ch+var_18+3], al <-- key 1 = .text:0052DD12     xor  al, 0Fh 

また、if ailed。だから私はここになるだろう

.text:01410C95     mov  eax, dword_1B8F6DC <--- contains ptr to the same objectmanager 
.text:01410C9A     mov  [esp+1Ch+var_C], eax 
.text:01410C9E     xor  byte ptr [esp+1Ch+var_C+2], 35h<-- key 2 
.text:01410CA3     xor  byte ptr [esp+1Ch+var_C+1], 14h<-- key 3 
.text:01410CA8     xor  byte ptr [esp+1Ch+var_C+3], 17h <-- key 1 
.text:01410CAD     mov  cl, al 
.text:01410CAF     xor  cl, 6Ah<-- key 4 
.text:01410CB2     mov  byte ptr [esp+1Ch+var_C], cl 
.text:01410CB6     cmp  [esp+1Ch+var_C], 0 
.text:01410CBB     jnz  short loc_1410CD6 

: は、通常、私はこのように排他的論理和をとるために使用していますXORキー= 0x1735146A

を誰かが奇妙なXOR演算の最初の1で私を助けてもらえますか?

+0

[リバースエンジニアリングのためのスタックエクスチェンジサイト](http://reverseengineering.stackexchange.com/)があります。しかし、これはあまりにも広すぎるかもしれません。何を把握しようとしているのかを明確にすることはできますか? –

答えて

0

ecx == some constantを確認するのは非常に複雑な方法です。最終的にはゼロとブランチを比較します。 (XORは、両方の入力が同じ場合にのみゼロの結果しか生成しません)。ポインタがNULLになっていない場合、ポインタとして使用されることはありません。

実行時にこのコードをシングルステップ実行して、最初の値をecxにロードし、最終値を[esp+1Ch+var_18]に記録してください。その2つの32ビット値の排他的論理和がキーになります。初期値が取り消され、介在する命令によって反転されたビットだけが残されるからです。定義によって、その XORキーです。

関連する問題