* UPXもどきを作る#1 -(by [[K]], 2020.01.09) ** (1) -UPXするとWindows Defenderにマルウェア扱い受けることがある。これは悲しい。どうにかしてマルウェア扱いを受けないようにしたい。 ** (2) -UPXでesbasic32.exeを圧縮してみると、UPX0, UPX1, UPX2という3つのセクションができる。これは明らかに「普通」ではない。普通なら、まず「.text」があって、「.data」があって、「.bss」があって、最後に「.idata」がある。・・・ここを見てWindows Defenderはケチをつけてきているのかもしれない。 -私が、winchars0i.exeを作った時に分かったこととして、セクションは「.text」の一個だけでも許してくれるので(.idataを.textの末尾に入れられる)、.textの一つで何とかできないだろうか? --(wincharsは[[p20181026c]]にあります) -とはいえ、一度にあれこれと改造するとたぶん収拾がつかなくなるので、まずは「.text」「.bss」「.idata」の順番にすることを試みよう。具体的にはどうするのかというと、UPX1のセクションの内容の頭に、メモリ転送プログラムを付ける。その後にUPX版のエントリポイントにJMP。これでUPX0, UPX1の順番でロードされたかのように振る舞う。 ** (3) -[分かったこと#1] --セクションのサイズは4KB単位で切り上げることは許されるけど、それよりも1バイトでも大きくすると怒られる。 -[分かったこと#2] --UPXではインポートテーブルを少しでも小さくするために、ASCIZの末尾のゼロを省略できるときは省略している。これは攻めている! -[分かったこと#3] --UPXが出力する.exeファイルのヘッダサイズは4KBということになっているが、実際は512バイトしかない。でもWindowsはこれをとがめない。 --このフィールドを無視しているというわけではなく、0にすると起動できなくなる。 --いやでも、ここでいうheaderは0x400000〜0x400fffの4KBのサイズのことを言っているのかもしれない。それならおかしくはない。 -[分かったこと#4] --KERNEL32.dllをインポートする指定にすると、途端にチェックが厳しくなるようだ。 -[分かったこと#5] --.idataのセクションは他のセクションとマージしてはいけない。それをやるとWindows7では実行できないバイナリになってしまう。・・・ようだ。 --でも、この.idataのセクションはサイズを切り詰めることは可能っぽい。 --いや、それもだめだった・・・。 * こめんと欄 #comment