301 Moved Permanently

Moved to https://vow.g.hatena.ne.jp/vow/

kicked

eax=00000000 ebx=00000001 ecx=00000000 edx=00ff0ad0 esi=77e57ea1 edi=0012fcbc
eip=00401130 esp=0012fc10 ebp=77e58299 iopl=0         nv up ei pl zr na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000246

        00401106 81fa5f8f4b42     cmp     edx,0x424b8f5f
        0040110c 5f               pop     edi
        0040110d 5a               pop     edx
        0040110e 0f8428ffffff     je      0040103c
        00401114 64ff3500000000   push   dword ptr fs:[00000000] fs:00000000=????????
        0040111b 682cceda04       push    0x4dace2c
        00401120 8d6c1130         lea     ebp,[ecx+edx+0x30]     ds:0185a9b7=????????
        00401124 2bea             sub     ebp,edx
        00401126 8d6c15d0         lea     ebp,[ebp+edx+0xd0]     ss:0185a9b7=????????
        0040112a 2bea             sub     ebp,edx
        0040112c e9f4ffffff       jmp     00401125
        00401131 ec               in      al,dx
        00401132 08e9             or      cl,ch
        00401134 0100             add     [eax],eax              ds:00000000=????????
        00401136 0000             add     [eax],al                     ds:00000000=??
        00401138 195257           sbb     [edx+0x57],edx         ds:0185a9b6=????????
        0040113b 55               push    ebp
        0040113c 33d2             xor     edx,edx
        0040113e e873000000       call    004011b6
        00401143 59               pop     ecx
        00401144 4f               dec     edi
        00401145 2cdf             sub     al,0xdf

(続き)

そもそもIPが合ってないので意味はないのだけど、それにしてもなんだろなこれは。ええとまず401126disp8は符号拡張されるので+0D0hはわとすん君の逆汗が間違いで-30hが正しい。しかるにleaは命令名*1の通り単にEA計算するだけであって、つまり401120から4命令を消費して

        00401120 8d6c1130         lea     ebp, [ecx+edx+30h]     ebp ← ecx + edx + 30h
        00401124 2bea             sub     ebp, edx               ebp ← ebp - edx
        00401126 8d6c15d0         lea     ebp, [ebp+edx-30h]     ebp ← ebp + edx - 30h
        0040112a 2bea             sub     ebp, edx               ebp ← ebp - edx

全体で ebp ← (((ecx + edx + 30h) - edx) + edx - 30h) - edx となるが、これは結局 ebp ← ecx であって他に副作用は何一つ無い。

・・・まあこれはこれで本当にいったい何がしたかったのか疑念は残るけれど、実のところそんなことはどでもよくてだな、本題はIntelニモニックにC臭い0x使うってのは非常に悪趣味に思えることなのでした。まる。


無意味の続き。40112Cのjmpがたかが-12の飛距離なのにshortでなくnearな時点でなんだか微妙な気分がするわけで、状況証拠的には謎packerあたりが何かfixupを大間違いしてコードをブチ壊しているように見える。以下根拠。後続の401131は普通に考えておかしいけれど、かといってtableの類を踏んだようにも見えないわけで、どちらかというと401133E9がやっぱり jmp near のE9なのだろうから、そうすると401131は2バイト命令だったはずである。同様に401138も見るからに非常識であって、どちらかというと401138は1バイト命令で401139から(あるいは401138から)pushの連続だったのであろう。すなわち2箇所の見るからに非常識なゴミは共に謎っぽい jmp near の直後1バイトなわけで、しかも問題のjmpもそのままでは飛び先が実に不自然であって、このdisp32を書き換えようとして場所を1バイト間違えたと考えるとすんなりつじつまが合いそうである。

        0040110c 5f               pop     edi
        0040110d 5a               pop     edx
        0040110e 0f8428ffffff     je      $0040103c
        00401114 64ff3500000000   push    dword ptr fs:[0]
        0040111b 682cceda04       push    4DACE2Ch
        00401120 8d6c1130         lea     ebp, [ecx+edx+30h]
        00401124 2bea             sub     ebp, edx
        00401126 8d6c15d0         lea     ebp, [ebp+edx-30h]
        0040112a 2bea             sub     ebp, edx
        0040112c e9f4ffffff       jmp     $00401125 ←?
        00401131 ??08             ???
        00401133 e901000000       jmp     $00401139 ←?
        00401138 ??               ???
        00401139 52               push    edx
        0040113a 57               push    edi
        0040113b 55               push    ebp
        0040113c 33d2             xor     edx, edx
        0040113e e873000000       call    $004011b6
        00401143 59               pop     ecx
        00401144 4f               dec     edi
        00401145 2cdf             sub     al, 0DFh

では401131は何だったのだろう? 2バイト目の08immed8ってことは・・・まあなさそうだからなしとして、short branch のdisp8なら飛び先は40113B・・・これも文脈的に難易度高すぎるか。となるとやはりmod-reg-r/mバイトであろうからオペランドは(第一バイトのdwビットを01と仮定して)推定 [eax],ecx になる。

とりあえず fs:[0] が見えているからにはこれで総じて例外ハンドラの類のはずなんだけど・・・ほんとなにやってんだコレ。まさか xor eax, dword ptr 0 なんて剛毅なことはいわないと信じたいんだけど。

*1:Load Effective Address