Tersine mühendislik: bunun için gerçekten iyi olan nedir? [kapalı]


15

Bazı masum / başlangıç ​​sorularım var:

  • Tersine mühendislik ne işe yarar?
  • Bir programcı olarak, tersine mühendislik sanatını öğrenmeli miyim?
  • Onunla deneyimli bir programcının faydaları nelerdir?

5
Bu soru sadece tersine mühendislik sökme tipi mi, yoksa diğerleri için mi? ("montaj" ve "düşük düzey" etiketlerinde bulunduğundan ..)
Izkata

Yanıtlar:


14

Tersine mühendislik ne işe yarar?

Tersine Mühendislik esas olarak çatlama ve korsanlık için iyidir (seri numarası koruması veya parola istemlerini kaldırın), aynı zamanda diğer yazılımların gerçekleştirebileceği virüsleri veya mucizeleri anlamak için de iyidir. Bazen, kaynağınız olmayan programlarda hataları bulmak ve onları yamalamak için yararlı bir beceridir.

Bir programcı olarak, tersine mühendislik sanatını öğrenmeli miyim?

Evet, derleyici öğrenmeye ve iyi bir hata ayıklayıcı kullanmaya çalışın. Metale daha yakın olan daha düşük seviyelerde şeyleri anlayarak sizi daha iyi bir geliştirici yapacaktır.

Tersine mühendislik konusunda deneyimli bir programcının faydaları ne olacak?

İyi bir bilgisayar korsanı olacaksın. Diğer antivirüs üreticileri için çalışabilirsiniz. Kişisel bir örnek olarak: Bir kez, bir oracle bağlantısı kurarken oluşan bir hatayı izlemek için bir yazılımı tersine değiştirdim. Başka hiç kimse sorunu çözemedi, bu yüzden bir şöhretim var.

Ayrıca , kesinlikle doğru olduğu için @ johannes yorumundan da alıntı yapmak istiyorum :

Ben "kötü" çatlama ile sınırlamak olmaz. Sökme, derleyicinin delip geçmediğini anlamak için yararlı olabilir (genellikle kodunuz olsa da), daha sysadmin bakış açısından bir uygulamanın nerede başarısız olduğunu görmek ilginç olabilir


8
Ben "kötü" çatlama ile sınırlamak olmaz. Sökme, derleyicinin delip geçmediğini anlamak için yararlı olabilir (genellikle kodunuz olsa da), daha sysadmin bakış açısından, bir uygulamanın nerede başarısız olduğunu görmek ilginç olabilir ...
johannes

@johannes: Evet, haklısın. Cevabımda yazabilir miyim?
Falcon

emin, istediğiniz gibi yapmak, ben bu konuda hiçbir telif hakkı iddia ;-)
johannes

7
Üzgünüm ama bu kesinlikle korkunç bir cevap. Tersine Mühendislik kesinlikle tanımlandığı gibi "esas olarak ... çatlama ve hackleme için" değildir ve sistem programlamasıyla ilgilenmeyen herkes bu ideolojik perspektiften tanıtılarak bir kötülük yapılır.
Chuu

1
Henüz belirtilmediğini sanmıyorum, ancak bunu size ait olmayan bir yazılımda (veya kimseye söylemeyin) yaparsanız dikkatli olun. Neredeyse tüm ticari EULA'lar tersine mühendisliği yasaklamaktadır. Birinin IP avukatına kopyalarını içeren bir durdurma ve vazgeçme mektubu almak istemezsiniz.
Bratch

25

Falcon'un cevabını seviyorum , ancak bazı eski sıkıcı iş uygulamalarında dünya tersine mühendisliğin sizi kötü sıkıntılardan kurtarabileceğini eklemek istiyorum.

İş yerinde, yeni bir bakımı olmayan 3. taraf bir sistemle veri entegrasyonu yaparken bunu çok yapıyoruz, böylece nerede kırılması gerektiğini veya kırılmaması gerektiğini biliyoruz.

Kaynak kodu dahil edilmemişse, satın aldığımız 3. taraf bileşenlerdeki kod kalitesini (elbette belirli kısıtlamalarla) kontrol etmek için ters mühendis kullanırız.

Asıl nokta şu: Tersine mühendislik tek bir teknolojiye veya dile bağlı değil , bir "kara kutunun" içindekileri öğrendiğiniz bir süreçtir . Bağlı olduğunuz bir kodunuz varsa, ancak güvenmiyorsanız veya güvenemiyorsanız, kesinlikle kaputun altına bir göz atmanız ve kodun ne yaptığını görmeniz gerekir.


Heck, sadece gereksinimlerimizi bazen doğru bir şekilde doldurup doldurmadıklarını kontrol etmek için kiraladığımız 3. parti sistemlerin SQL depolanmış prosedürlerini bile inceliyoruz.
Machado

3
+1. Büyük bir şirketten çok satan bir yazılım ürünü bile, yetersiz, güncel olmayan, sadece düz-yanlış, bazen var olmayan çevrimiçi belgelere ve benzeri şeylere bazen kara bir kutu olabilir.
RalphChapin

13

Tersine mühendisliğin damla sıkıcı tarafı da var. Bu, bulunduğunuz şirketin hala kullanılmakta olan bir kod veya programa sahip olduğu, ancak hiç kimse bu konuda bir şey bilmediğini iddia ediyor. Böylece, üzerinden geçiyorsunuz, belgeliyorsunuz, testler yazıyorsunuz ve bir proje başlamadan önce yapılması gereken tüm mühendislik işleri. Bunu zaten yazılmış bir yazılım parçası için yaparsınız, dolayısıyla "tersine mühendislik" yaparsınız.

Kodunuz olduğunda çok daha kolay, ancak yine de teknik olarak tersine mühendislik. Eski projeler hakkında konuşurken iş toplantılarında çokça ortaya çıkan terimlerden biri.


+1, özellikle benim için doğru. Eski sistemlerin tek bir teknik belgeye sahip olmadığı bazı bankalarda çalıştım.
Machado

7

Sadece tersine mühendislik iş değerini artırmak için - karşılaştığımız yeni müşterilerin yarısından fazlasında mevcut bir sistem / uygulama var (her zaman üretimde değil, sizi düşünüyor), ancak önceki bir yazılım geliştirme satıcısıyla olan ilişkinin kızaklara çarptığı yer.

Vakaların yaklaşık% 30'unda müşteri kendi sistemi için kaynağa sahip değildir ve çoğu durumda gerçek iş sürecinin, kurallarının ve bilgilerinin çoğu kod içinde kilitlenir.

Ve önceki satıcıların kötü niyetli olduğu birkaç durumda, müşteriyi süresiz olarak sarsmak için ikili dosyaları gizledi, kodu vb.

Sorunuzu cevaplamak için, tersine mühendislik genellikle oldukça umutsuz (ve yanmış) müşterilerle yeni katılımlar için bir başlangıç ​​noktasıdır ve mevcut koddan unutulmuş bilgileri çıkarmak için 'iş açısından kritik' bir başarı faktörü olabilir.


2

Tersine mühendislik için beceri setinin ve hata ayıklama için beceri setinin tamamen aynı olduğunu iddia ediyorum - eğer fantastik bir hata ayıklayıcıysanız, aynı zamanda fantastik bir ters mühendissiniz ve bunun tersi de geçerlidir.


1

Bazen anladığım kadarıyla bazı parçaların / yazılımların birlikte çalışmasını sağlamak için kullanılır. Bazı garip arayüzler, uygulamadaki hatalar, vb.

Ama anladığım kadarıyla, bu çok kaygan bir konu ve bu nedenle, zaten karmaşık yazılım geliştirme yasaları tersine mühendislik ile aşırıya uçuyor.


1

Tersine mühendislik ile çalışmanızı en aza indiren kodu yeniden kullanabilirsiniz. Örneğin, Symfony2'de normal MySQL'den yapılmış bir veritabanını dönüştürebilir ve doktrin formatına dönüştürebilirsiniz ve bu Symfony'de mümkün kılınan tersine mühendislik işlemidir. .... ve tersine mühendislik ile, '2D'de' diyelim ki kodu görebilirsiniz


0

Deneyimlerimden sadece gerçek bir dünya örneği veriyorum.

Şirketimiz bir kez başka bir şirketten bir proje devraldı. Projeye yaklaşık yarım yıl kala bir alt projenin kodsuz olduğunu fark ettik. Eski şirketten kodu teslim etmesini istediğimizde, kibarca alt projenin kodunu bulamadıklarını yanıtladılar. Koda ihtiyacımız vardı, çünkü o alt projedeki bir şeyi değiştirmek istedik.

Alt projeyi tersine çevirmek zorunda kaldım .

Önce montajı derledim (evet, bir .NET projesidir). Ayrıştırılmış montajın sonucu, yerel değişkenlerin isimleri ve karmaşık bir kontrol yapısı olmayan yumuşak ve kafa karıştırıcı bir koddur. Bunun nedeni, derlemenin ayrıştırılamayan önemli bilgileri atmasıdır.

Sonra bu kodu değiştirmek için nerede anlamaya çalıştım. Bunu yapmak için kodun aynı ama daha özlü bir şekilde davranmasını kolaylaştırdım. Ayrıca değişkenlerin isimlerini davranışlarından tahmin ettim. Ne yaptığını anlayana kadar koddan birçok kez adım attım.

Her şeyi tersine çevirmedim, sadece değiştirmek zorunda olduğumuz kısmı. Çok kötü değildi, yaklaşık 200 satır VB kodu. Çalışma süresi yaklaşık beş gün sürdü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.