- إنضم
- 17 نوفمبر 2005
- المشاركات
- 0
- مستوى التفاعل
- 1
هنا الدخول في الطريق الصّحيح لمجال تعديل السّوفتوير بالشكل المناسب غير المتعارف عليه سابقاااااا
و نبدأ مع أوّل تذكرة في هذه الطّريقة الوعرة و المتشعّبة مع برنامج dasm st20 و طريقة استعماله و كيفيّة قراءة الملف الناتج عن تفكيك جزء من السوفتوير
نفتح البرنامج و نختار الجزء المراد تفكيكه من السّوفتوير و اختيار أيضا مسار الملف بعد تفكيكه
و انتبهوا إلى اعدادات البرنامج جيّداااا كما في الصّورة
و هنا أخذنا مثالا بسيطااااا حول مكان وجود الإصدار و رقمه و تاريخه و اسم الحبار الذي أصبح الجميع يستطيع تعويضه باسم آخر دون التمكّن إضافة و لو بايت واحدة فقط .... الآن يمكنكم ذلك إن أردتم....مع أنّ هذا ليس غرضنا
نأتي الآن للملف المفكّك
كود:
]===============================================================================
Subroutine Summary
===============================================================================
Subroutine Called From
===============================================================================
0000F660 30 ldnl #0
..........
..........
..........
0000F7D1 49 ldc #9
0000F7D2 42 ldc #2
0000F7D3 4D ldc #D
0000F7D4 00 j loc_F7D5
0000F7D5 4E loc_0000F7D5: ldc #E
0000F7D6 6572 ldl -#5E
0000F7D8 6100 j loc_F7BA
0000F7DA 42657461546563686E696B00 .string "BetaTechnik
0000F7E6 4E61677261566973696F6E00 .string "NagraVision
0000F7F2 416C376261722046544120556C747261 .string "Al7bar FTA Ultra"
00
0000F803 4C69666574696D6520556C74726100 .string "Lifetime Ultra
0000F812 416C37626172202D20322E383900 .string "Al7bar - 2.89
0000F820 42 ldc #2
0000F821 6F6F74 ldl #F04
0000F824 20 .db #20
0000F825 76 ldl #6
0000F826 6572 ldl -#5E
0000F828 20 .db #20
0000F829 3A ldnl #A
0000F82A 20 .db #20
0000F82B 00 j loc_F82C
0000F82C 32 loc_0000F82C: ldnl #2
0000F82D 34 ldnl #4
0000F82E 2E204E ldc #E0E
0000F831 6F76 ldl -#FA
0000F833 2E2032 ldnl #E02
0000F836 30 ldnl #0
0000F837 30 ldnl #0
0000F838 35 ldnl #5
0000F839 2874 ldl #84
0000F83B 2900 j loc_F8CD
0000F83D 20 .db #20
0000F83E 20 .db #20
0000F83F 20 .db #20
0000F840 60BB ajw -#5
0000F842 76 ldl #6
0000F843 21282E295E ldnlp #18E9E
0000F848 2BF9 lbx
0000F84A 48 ldc #8
0000F84B 24F1 shl
0000F84D 76 ldl #6
0000F84E 21282E295E ldnlp #18E9E
0000F853 81 adc #1
0000F854 2BF9 lbx
0000F856 24FB or
0000F858 2F2F2F4F ldc #FFFF
0000F85C 24F6 and
0000F85E D4 stl #4
0000F85F 40 ldc #0
0000F860 D0 stl #0
0000F861 76 ldl #6
0000F862 2B2C53 ldnlp #BC3
0000F865 25FA dup
0000F867 D6 stl #6
0000F868 30 ldnl #0
0000F869 53 ldnlp #3
0000F86A D3 stl #3
0000F86B 70 loc_0000F86B: ldl #0
0000F86C 73 ldl #3
0000F86D 28F1 wsubdb
0000F86F 25FA dup
0000F871 D2 stl #2
0000F872 82 adc #2
0000F873 2CFA ls
0000F875 25FA dup
0000F877 D1 stl #1
0000F878 272F2F4F ldc #7FFF
0000F87C 24F6 and
0000F87E 74 ldl #4
0000F87F F4 diff
0000F880 C0 eqc #0
0000F881 A9 cj loc_F88B
0000F882 71 ldl #1
0000F883 28202040 ldc #8000
0000F887 24F6 and
0000F889 C0 eqc #0
0000F88A AA cj loc_F895
0000F88B 70 loc_0000F88B: ldl #0
0000F88C 81 adc #1
0000F88D D0 stl #0
0000F88E 48 ldc #8
0000F88F 70 ldl #0
0000F890 F9 gt
0000F891 22A8 cj loc_F8BB
0000F893 6206 j loc_F86B
0000F895 72 loc_0000F895: ldl #2
0000F896 51 ldnlp #1
0000F897 2CFA ls
0000F899 272F2F4F ldc #7FFF
0000F89D 24F6 and
0000F89F 77 ldl #7
0000F8A0 2CF8 ss
0000F8A2 70 ldl #0
0000F8A3 76 ldl #6
0000F8A4 30 ldnl #0
0000F8A5 53 ldnlp #3
0000F8A6 28F1 wsubdb
0000F8A8 51 ldnlp #1
0000F8A9 2CFA ls
0000F8AB 28202040 ldc #8000
0000F8AF 24F6 and
0000F8B1 4F ldc #F
0000F8B2 24F0 shr
0000F8B4 78 ldl #8
0000F8B5 23FB sb
0000F8B7 41 ldc #1
0000F8B8 B5 ajw #5
0000F8B9 22F0 ret
0000F8BB 40 loc_0000F8BB: ldc #0
0000F8BC B5 ajw #5
0000F8BD 22F0
و هذه الصّورة تبيّن معاني بعض المصطلحات المستعملة حيث هذه هي لغة برنامج assembleur
و عندما نفهم جيّداااا لغة الأسومبلار نستطيع التعامل مع الملف كأنّه كود سورس للسوفتوير
علما بأن الكود سورس مكتوب بلغة البرمجة C+ مثلما نرى هنا مثال حول كيفيّة قراءة RAM :
كود:
]*
* memory/simple.c
*
* Copyright (C) SGS-THOMSON Microelectronics Ltd. 1997
*
* Simple memory partition functions
*/
/*{{{ includes*/
#include <stdlib.h>
#include "memi.h"
#include "os20i.h"
/*}}} */
#define partition_base u.partition_fast.partition_fast_base
#define partition_size u.partition_fast.partition_fast_size
#define partition_free u.partition_fast.partition_fast_free
/*{{{ void* memory_allocate_simple (partition_t* Partition, size_t Requested)*/
void* memory_allocate_simple (partition_t* Partition, size_t Requested)
{
void* Memory = NULL;
unsigned int Claimed;
unsigned int Available;
if (Partition == NULL || Requested == (size_t) NULL)
return NULL;
Available = Partition->partition_size -
((char*)Partition->partition_free - (char*)Partition->partition_base);
if (Available >= Requested)
{
Memory = Partition->partition_free;
Claimed = (Requested + (BYTES_PER_WORD - 1)) & WORD_MASK;
Partition->partition_free = (char*)Memory + Claimed;
}
return Memory;
}
/*}}} */
/*{{{ void memory_deallocate_simple (partition_t* Partition, void* Block)*/
void memory_deallocate_simple (partition_t* Partition, void* Block)
{
}
/*}}} */
/*{{{ void* memory_reallocate_simple (partition_t* Partition, void* Block, size_t size)*/
void* memory_reallocate_simple (partition_t* Partition, void* Block, size_t size)
{
return 0;
}
/*}}} */
const partition_class_t partition_class_simple_init = {
partition_uninit_generic,
memory_allocate_simple,
memory_deallocate_simple,
memory_reallocate_simple,
};
int partition_init_simple_generic(partition_t* Partition, void* Base,
size_t Size, const struct partition_class_s *partition_class)
{
if (Size==0)
return -1;
task_align(&Base, &Size);
Partition->partition_class = partition_class;
Partition->partition_base = Base;
Partition->partition_size = Size;
Partition->partition_free = Base;
Partition->partition_next = NULL;
partition_add(Partition);
return 0;
}
/*{{{ void partition_init_simple(partition_t* Partition, void* Base, size_t Size)*/
int partition_init_simple(partition_t* Partition, void* Base,
size_t Size)
{
return partition_init_simple_generic(Partition,Base,Size,
&partition_class_simple_init);
}
/*}}} */
انتهى الشّرح الأوّل متمنّيا أن أكون قد وفّقت في إيصال معلومة واضحة لكم و خاصّة لخبراء لغة البرمجة مع أنني أعلم بأنّ الأمر معقّد كثيراااا
و الى اللقاء في مناسبة أخرى و شرح آخر تقبلوا مني أحلى تحيّة مرفوقة بالبرنامج المستعمل و ملف كود سورس ( غير مكتمل) لجهاز بلاك بيرد ذو ميكروبروساسور 5500