* 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

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS