Thursday, May 12, 2016

Хэрхэн програм кракдах вэ ?

Энэ програм хангамжаар PowerIso гэх DVD,CD шардаг програм хангамжийг сонгож авсан. Эхлээд уг програм хангамжийн бүртгэлийн хэсэг хийдэг талбарыг устгах зорилготой коднуудад өөрчлөлт оруулсан ч амжилт олоогүй улмаар бүртгэлийн хэсэгийг алгасах зорилготой ажилласнаар програмыг кракдаж чадсан. Ингэхдээ би notepad++ ашигласан байгаа. Үүгээр тэмдэгтүүдийг нь notepad дээрээ хуулснаар String-үүдийг хайх боломжтой болсон Ollydbg  програм нь find хийж болдог боловч зарим тохиолдолд хийхгүй байсан.

Энэ талбар дээр голлож ажилласан. Нэг нь буруу дугаар оруулж алдааны мессеж гаргаж байгаа хэсэг нөгөө зөв дугаар оруулж бүртгэлийн хэсэг баталгаажсан гэсэн мессеж. Энэ 2 дээр 2лан дээр  breakpoint хийж яг хаанаас, аль хаягнаас дуудаж байгааг нь харж ажиглаж болно.
Тэгэхээр энэ тэмдэглэгдсэн хэсэг дээр яг хаашаа үсрэх вэ ? гэдэгийг нь зааж байгаа. Хэрвээ энэ нөхцөл үнэн болоод 004674DC гэсэн хаягруу үсрэх юм бол бидний баталгаажсан гэсэн хэсэгрүү очих юм.
Ингээд assemble хийгээд үсэргэсэн боловч шууд бодсон газар маань очоогүй юм.
Тухайн алдаатай мессеж дуудаж байгаа газар 0046728C гэсэн хаягнаас утга авч байгаа. Энэний дагуу энэ хаяган дээр очив.

 Энэнээс дээшээ 2 мөр болоход 00467291 гэсэн хаягруу үсрэх нөхцөл байна энэ маань харин тухайн алдаатай мессеж ирэх хаягруу үсрэг тэр хэсгийг давж гарсан байна.


Энэ нөхцөлийг шалгахгүй шууд Assemble хийж jmp болгов. Ингээд кодын дагуу цааш явж байтал.
Дахин 2 үсрэх нөхцөл гарч ирэв мэдээж энэ үсрэх нөхцөлийг  Assemble хийж  jmp болгох юм бол мэдээж бидний алдаатай мессежний талбарлуу давхиад очино.
Тийм болохоор энэ кодыг Assemble хийж nop болгон идэвхгүй болгосон.
Ингэж цааш явсаар байгаад үсрэх ёстой газарлуу үсэрч бүртгэгдсэн гэсэн мессежийг гаргаснаараа програм цаашид хэвийн ажиллах юм.