من از دو تا نرم افزار استفاده کردم و مقداری برنامه نویسی.
1- از یک packer استفاده کردن که open source هست و این مزیت رو داره که میشه هر بار توش تغییراتی ایجاد کرد تا Unpack کردنش سخت تر بشه (البته اینجا کار خاصی انجام ندادم و یه تغییرات کوچیک نسبت به default اش اعمال کردم)
2- از نرم افزار {smartAssembly} همونطور که شما اشاره کردید استفاده کردم.

ابتدا با packer برنامه رو pack و compress کردم
بعد برنامه حاصل رو با smartAssembly یه کارهایی روش انجام دادم : obfuscate و meta-data streaming یه تعداد کارهای روتین دیگه.
بعد برنامه حاصل رو دوباره pack کردم این بار با یه روش دیگه.

packer کار لود برنامه اصلی رو از Resource انجام میده و smartAssembly هم کار meta-data streaming رو.