پسورد يه برنامه بايد چيزي باشه كه برنامه بهش وابسطه است نه اينكه چك كنندش پيدا كردن پسورد زمان و وقت و ابزار ميخواد و با حوصله پيدا ميشه ( بستگي به روش كد شدن ممكنه راحت پيدا بشه )
اول يه توضيح در مورد پي كد و ان كد بدم
همينطور كه همه ميدونن برنامه ها بد از كامپايل شدن و ساخت فايل اجرايي بصورت اسمبلي در روي هارد ذخيره مي شن ( منظورم قسمت پروگرام شده است نه ديتا ها )
دستورات اسمبلي مثل mov يا call و .... هستن كه نحوه استفاده از اونها كاملا معلومه
به اين نوع از فايلها كد محلي يا طبيعي گفته ميشه ( ان كد) يعني دستورات برنامه به راحتي قابل فهم هست.
اما در حالت پي كد برنامه در واقعه يه نوع دستورات كامپايل نصف و نيمه هستش كه براي اجرا نياز به فايل كمكي داره بزارين بيشتر توضيح بدم
دستوارتي كه در پي كد استفاده ميشه كاملا اسمبلي نيست و يه درجه بالاتر از اونه نتيجه اينكه يه زره كندتره يعني بايد براي اجرا توسط فايل كمكي دوباره به دستورات اسمبلي تبديل بشه و اين كار زمان بره
مثلا براي اينكه مقدار اي كه از تابع برگشت داده شده رو تو حافظه ذخيره كنيم توي وي بي مي نويسيم
A=function(xxx1,xxx2,xxx3)
اما توي اسمبلي معمولي مي نويسيم
Push dword ptr xxx3
push dword ptr xxx2
push dword ptr xxx1
call dword ptr function address
mov dword ptr addresss_of_a , eax
در صورتي كه مقادير توابع بصورت دابل ورد و ادرس تابع هم قبلا در حافظه جا گذاري شده باشه و مقدار خروجي توي ادرس a ذخيره ميشه
اما توي حالت پي كد مي نويسيم
FLdRfVar xxx1
FLdRfVar xxx2
FLdRfVar xxx3
VCallHresult func address
ILdRf address of a
خوب همنطور كه ميبينيد فهميدن پي كد سختره اما قابل فهمه ولي وقتي ياد گرفتيش از اسمبلي راحتره چون به زبان انسانها نزديك تره
اما در مورد مشكل برنامه اقاي تچ ميكس
1- اسم فايل رو بهتر بود توي چندتا كد ميگذاشتي كه كركر به راحتي نفهمه كه برنامه يه كدر داره بلكه چندتا كد كه با هم جمع وتفريق و ... هرچي بشن بشه اسم فايل تا كدرت به راحتي بدست نياد
2- روش استفاده از بزرگتر و كوچكتر روش جالبيه اما بهتر نبود براي گرفتن كد يه ارايه درست مي كردي و بعد هر عدد رو توي يه ارايه مي زاشتي اينطور از كد اسكي استفاده نمي كردي تا اين تابع rtcasc… رو صدا نزنه و كركر سختر بفهمه چي با چي داره مقايسه ميشه
3- استفاده از rtcmsg كه جاي خوبي براي بريك پوينت براي كركر
4- مشكلات يا مشكلي كه قبلا گفتم
اما مزايا به نظرمن
1-عدم جنريت كد
2- عدم استفاده از تابع پرش براي عدم وجود فايل ( اگه نگاه كني مي بيني فايل رو باز ميكنه اگه خطاي ايجاد بشه ميپره به كد اخر يعني خروج . نميدونم از روي عمد اينطوري برنامه رو نوشتي يا نه ايدت اين نبوده )
3- عدم چك كردن مستقيم وجود چيزي در فايل ( با همون on error goto و استفاده از تابع mid كه اگه چيزي نباشه در ادرس مورد نظر مثلا كاركتر 10 باعث ايجاد خطا ميشه و از تابع خارج ميشه . اين هم از روي عمد بوده با نه ؟)
حالا يه سئوال دارم خوب با مقايسه كد و الگورتمي كه گفتم و شرحي كه بالا دادم فكر كنم الگوريتم رو درست حدس زدم نه ؟

ممكنه از عمد بعضي از جاها رو برنامه نويسي نكرده باشي اما خوب برنامت اين كار رو ميكنه جالب نه؟
نكته با اناليز معكوس برنامه خيلي وقتها ميشه فهميد كه كركر به راحتي ميتونه فايل رو كرك كنه يا نه چون امكان داره برنامه كاري رو كنه كه برنامه نويس اصلا به فكرش هم نرسيده باشه و برنامه اتوماتيك وار اين كار رو انجام بده . نتيجتا چون كركر از پايين پايين داره نگاه ميكنه اين نقاط ضعف رو بهتر ميبينه و برنامه رو راحتر كرك كنه ( بعضي از باگها و سوراخ هاي امنيتي همينطوري پيدا ميشن)
حالا ميرسيم به سئوال لرد جان ( ببخشيد كامل نميگم ياد هري پاتر ميفتم :lol: )
اولا اگه كد برنامتو با يه برنامه دي كد فايل كد پي باز كنم اولين چيزي كه توجه من رو جلب كرد اين خطوط بودن:
OnErrorGoto loc_403A71
OnErrorGoto loc_403AE7
OnErrorGoto loc_40344B
OnErrorGoto loc_40330B
OnErrorGoto loc_403769
كه همشون توي فرمي بودن كه كد رو ميگرفت نتيجتا توجه ادم جلب ميشه كه اينها يه كاري ميكنن
بعد هم هنگام تريس اونجاي كه برنامه خط به خط ميخوند رو يادته يعني crc يا همچين چيزي توي اين حالات ادم مي ياد و بعد از جاي كه جامپ به سر خط اول لوپ ميشه , بعدش بريك پوينت ميزاره و برنامه رو ول ميكنه كه اجرا بشه .اما چي شد اصلا ديباگر بالا نيومد يعني يه چك كنده اي بوده اما جك كنده هم ما رو به ادرس مورد نظر نفرستاد يعني يه چيز ديگه .خوب 2 در 2 ميشه 4 پس كار ، كار onerror خوب با اين وصف اولين مشكل برنامه اينكه به دست يه كركر محل هاي براي ست كردن بريك پوينت دادي. و هم جالبه چون كركر هاي نيتيو كد رو گمراه ميكنه.
اما وجود يه تبريك ادم رو واردار ميكنه فكر كنه كه برنامه نويس براي نشون دادن اون احتياج به فرم داره و يا به يك مسيج باكس. توي رفرنس برنامت مسيج باكس نبود و همچنين فرمي با عنوان تبريك بود حالا تو جاي كركر، كركر چيكار ميكنه خوب از اطلاعاتش براي نمايش فرم استفاده ميكنه يعني دنبال همچين خطي ميگرده
FLdRfVar ::lea var_D4
ThisVCallHresult ???
كه معمولا در اخر فرم يا تابع قرار داره ( دومين اشتباه ) با نگاه كردن به كد چيزاي جالبي به نظرش ميرسه مثل اين
403769 loc_403769: ; 40359E
…
4037A7 FF1B CBoolVarNull
4037A9 1C 1B02 BranchF ::jnz loc_4037B7
4037AC 04 2CFF FLdRfVar ::lea var_D4
4037AF 10 00070500 ThisVCallHresult ???
4037B4 35 2CFF FFree1Var ???
4037B7 loc_4037B7: ; 4037A9
4037B7 FF2F 0C001000 ExitProcCbHresult ???
4037BD FF2F 0C001000 ExitProcCbHresult ???
4037C3 00 84 LargeBos ???
403044 Form2.Command1_Event:
اگه خط اول رو ببيني مي بيني كه خطي كه بهش پرش شده رو نوشته و با رفتن به بالا و جستجو به عبارت movax,ax:: ميرسي كه نتيجتا كد بايد يه چيزي توي اين مايه ها باشه با دادن اين كد ميبيني كه به جاي هميشگي يعني جاي كه كد با ;16…. چك ميشد نميري يعني داري درست ميري
حقيقتش اولش برام سخت بود بفهمم كه برنامه چيكار ميكنه اما بعد با كمي بالا و پايين و جابه جا كردن بعضي از پرشها پيغام هاي رو ديدم كه كمكم كرد ( توي برنامه تجاري اين مشكل داره اما توي برنامه آموزشي نه ) تا بفهمم برنامه چيكار ميكنه نتيجتا سخترين قسمت فهميدن چگونگي نمايش بود نه تعداد كاركتر پسورد و نه چگونگي پرش به قسمت هاي گوناگون برنامت
در كل جالب بود ايده خوبي بود و من تا حالا همچين ايده اي رو نديده بودم
البته بگم كه كسي نيستم . و مثل همه شما در حال آموزشم.
منتظر ادمه توسط دوستان مخصوصا اقاي كركي اصف جان ,لرد سياه, تيچ مكس, و بقيه كساني كه توي اين بحث شركت ميكنن هستم :lol: