ABAP Kodu Kopyalayarak Program Çalınabilir Mi?

ABAP Nedir?

ABAP, SAP R/3 sistemlerinin yazılım geliştirme dilidir. SAP’nin içerisinde hazır gelen programların tamamı ABAP ile yazılmıştır. SAP üzerinde ek geliştirme yapmak isteyen bir programcı, program kodlarını yine ABAP dili ile yazmaktadır.

ABAP, açık kaynak kodlu bir dildir. Yani; SAP’nin standart programlarına ait kaynak kodları, sisteme giren ve yetkisi olan herhangi bir kişi tarafından serbest bir şekilde kopyalanıp alınabilir. Bir firmanın kendine özel geliştirdiği programların kaynak kodları da, aynı şekilde serbest bir şekilde kopyalanıp alınabilir.

Bu konuda, SAP sisteminin özel bir önlemi bulunmamaktadır. Bilakis; kodların açık olması, hata analizi, yedekleme, program taşıma gibi pek çok işlemi kolaylaştırmaktadır.

Diğer Teknik Nesneler

SAP sisteminde; ABAP kodlarının yanı sıra Table, Data Element, Domain, Structure, Lock Object, Authorization Object, Class, Function, Transformation, Checkpoint Group gibi sayısız teknik nesne bulunmaktadır. Yazılım geliştiren bir programcı, ABAP kodunun yanı sıra, bu ve benzeri nesneleri de oluşturmaktadır.

Bir ABAP programının çalışabilmesi için, kaynak kodunun yanı sıra, sonradan geliştirilmiş tüm bu nesnelerin de sistemde mevcut olması gerekir.

SAP, tam da bu yüzden, geliştirmelerin şirkete ait sistemler arasında taşınabilmesi için Transport Request adı verilen bir mekanizma geliştirmiştir.

Kodların Kopyalanması

Bir programcı, sadece ABAP kodlarını kopyalayarak bir programı bir firmadan bir başka firmaya taşıyabilir mi?

Eğer geliştirme sadece ABAP kodundan ibaret basit bir program ise; evet, bu mümkün olabilir. Ancak, sadece ABAP kodundan ibaret olup diğer teknik nesneleri içermeyen bir geliştirme, muhtemelen görece basit ve önemsiz bir geliştirme olacaktır.

Daha büyük çaptaki programlarda ise; programın kaynak kodlarının yanı sıra, programcının geliştirdiği sayısız yardımcı teknik nesne bulunacaktır. Sadece programın kodlarının kopyalanması, o programın bir başka sistemde çalıştırılabilmesi anlamına gelmemektedir.

Zira; kaynak kodların yanı sıra; yukarıda zikredilen diğer teknik nesnelerin de hedef sisteme taşınıyor olması gerekmektedir. Bu teknik nesneler ise, program kodları gibi kopyala & yapıştır ile alınabilecek karakterde değildir.


Şirketlere ait süreçleri kapsayacak çaptaki bir geliştirme, ABAP kodunun yanı sıra, muhtemelen pek çok yardımcı teknik nesne içerecektir. Bu tarz bir geliştirmeyi, sadece ABAP kodunu kopyalamak suretiyle bir başka firmaya taşımak pratikte pek mümkün gözükmemektedir.

Sadece program kodlarını kopyalayarak bir başka sisteme taşıyabileceğimiz geliştirmeler, teknik anlamda çok basit geliştirmelerdir. Muhtemelen şirket süreçlerini kapsayacak hassasiyette olmayacaklardır.


SAP PI or Not?

There have been lots of discussions on using SAP PI or not. The same applies to my projects as well: Often enough, project management needs to make a decision on running integrations through PI.

I want to share my highly subjective point of view regarding this matter.

Using PI has its advantages, which you can find on any SAP documentation. Some of them are:

  • The requirement of middleware development in .NET, Java, or even ABAP virtually disappears. You make PI configurations instead, which is theoretically easier in most cases.
  • Centralizing the entire communication makes everything more transparent and managable.
  • In case an integration error occurs, it is nice to have a neutral central system to do all the logging & monitoring of the data traffic.

However, there are disadvantages as well:

  • PI requires an extra licence. SAP won’t give if for free at this time.
  • It requires extra human resources to configure & manage & monitor everything.
  • ABAP development is not enough to build or extend an integration. Every time an ABAPer does something, PI needs to be touched as well. Therefore, development time could be longer than a direct ABAP solution.
  • PI inevitably has a performance cost, making the integration run slower in most cases.
  • If you run everything through PI and the machine running PI gets in trouble, all of your integrations will stop.

Considering those points, here is my (once again) highly subjective evaluation.

If you have to integrate SAP with external applications (meaning: 3rd part companies outside your firewall) and you don’t want to make SAP accessible without VPN due to security reasons, using PI is a good idea. Just make PI directly accessible through the Internet, and make it communicate with SAP securely behind the firewall.

If you have lots of SAP & NonSAP systems talking to each other, having a centralized system to conduct & log & monitor all the trafic could be preferrable. This would save development time on middleware & transformation & log coding. Especially if there are lots of asynchronous integrations & the integration methods vary greatly (meaning: web service, FTP, file, RFC, etc), letting PI do the heavylifting could save even further development time. Just make sure that you are beyond the break even point.

On the other hand…

Having PI might not be worth it if you merely have a handful of internal applications communicating via simple Web services or files or something. Especially if you don’t need to develop external middlewares.

In case you have a synchronous integration, the performance cost of PI might start to be a pain – especially if it’s a GUI application facing the users directly.

In such cases, you can make the applications communicate directly, and do some minor coding for error management & data logging – instead of inviting PI to the party.

During your evaluation, please remember that PI is merely a “FedEx” application: It will carry your data package from one system to the other, but it doesn’t care what you do with it. This means, it will ensure that you get the TXT file correctly. However; if you get in trouble during your BAPI calls, PI couldn’t care less – unless you develop a secondary integration to return your BAPIRET2 or something.

Here are some further resources on the subject I found to be useful:


How To Bypass Internet Blocks

It is a fact that some companies block your Internet access; as if you can’t do anything else if you want to be loafing. In such networks, you are unable to reach certain websites; such as Facebook, YouTube, sometimes even E-Mail services such as Gmail or chat applications like Gtalk, MSN, etc. In this article, I will teach you alternative methods of bypassing firewalls and having unblocked Internet access.
Please note that easier & cheaper solutions have less chance of success. As solutions get harder and more expensive, the chance of success will increase to 100%.
I can’t guarantee that you won’t be caught (personally or technically) using those techniques. If you get in trouble using those methods, you are responsible. If you keep reading, it means that you are accepting this.
VPN Service
Dummy-Proof: No, Free: No, Quality: High, Success Rate: High
VPN ports are usually not blocked. If you are ready to spend some money (around 5$ per month), you can purchase a VPN service and connect to the Internet through VPN, bypassing all limitations of your local company network. is such a service that I personally tried, it worked on many occasions. and also offer similar services. Google for more.
Remote Desktop
Dummy-Proof: No, Free: Yes, Quality: Low, Success Rate: High
Many companies leave the ports for remote desktop access open. This means, you can use Windows Remote Desktop, TeamViewer, etc. If you know the credentials of a remote computer, open a remote desktop connection to that computer and access the Internet through the browser of the remote computer; bypassing all limitations of your local company network. You can even leave your home PC running; just enable remote connections and write down your IP address. When you go to work, access your home computer remotely and browse any site you want.
The downside is; you may not be able to watch videos properly due to remote desktop resolution. To overcome this difficulty, you can consider installing a SSH server to your home computer and access the Internet over the remote SSH; instead of the remote desktop connection. How? It is explained here: .
Private Modem
Dummy-Proof: Yes, Cost Efficient: No, Quality: Low, Success Rate: 100%
Having a USB modem is a 100% working method. Contact your mobile operator, and purchase a USB modem (such as Turkcell Vınn or Vodaphone Vodem) with a 3G Internet package. Whenever you need unblocked Internet access, plug your USB modem and connect. You may (or may not) need to disable your wireless or LAN connection meanwhile. You will be bypassing the corporate network to access the Internet; you will have a direct connection between your computer and your mobile operator. Therefore; you will have unblocked Internet access. But your connection speed may not be very fast.
The same logic applies to your mobile phone. If you have an Internet-enabled mobile phone, you can access the Internet through your phone; there is no one to block you. However, the Internet speed and experience on a small device may not be ideal.
If you have your own room and phone line, you can bring your own modem into the company and connect directly to the phone line. Use your own ADSL password, and you have a direct connection from your computer to your Internet provider; bypassing all corporate limitations.
Alternative Networks
Dummy-Proof: Yes, Free: Yes, Quality: High, Success Rate: Medium
If you can find an alternative wireless network around you, try joining that network and browsing the Internet through that one.
Some companies have special wireless networks for visitors, which are not blocked at all. If that’s the case and the network doesn’t ask for a password, you are good to go. If the network does ask for a password, it shouldn’t be that hard to learn since all guests would ask for it anyway.
Some companies have neighbours with unsecured wireless networks. You can join them for unblocked Internet access, but you could be consuming a limited Internet bandwidth. Make sure that you are not stealing your neighbours bandwidth.
If there are secure wireless networks around, you can try becoming friends with one of the neighbours, he/she may give you their wireless network password so you can use their modem for unblocked Internet access.
If you are in Turkey and find a TTNet ADSL Hotspot around, use your own ADSL password to access that hotspot and have unblocked Internet access.
Dummy-Proof: Yes, Free: Yes, Quality: High, Success Rate: Low
Some networks are configured to block HTTP, but they don’t block HTTPS. If you can’t access , try accessing . This has a weak chance of success, but I have seen it work.
HTTP Tunneling
Dummy-Proof: Yes, Free: Yes, Quality: Low, Success Rate: Low
HTTP tunneling is also an easy method; therefore, it has a weak chance of success because many corporations block tunneling services as well. Anyway; try entering the blocked website through a HTTP tunnel website. Some popular servers are , and ; Google for more.
However; you can setup your own Google Apps server at your home computer and access the Internet freely through that proxy; if Appspot is not blocked. It is explained here: . A similar method is to use PHProxy; as explained here: .
Even if you succeed, you may experience slow connections or disconnections due to high traffic on public tunneling servers; or because of the technical framework of heavy Ajax websites.
Public Proxies
Dummy-Proof: No, Free: Yes, Quality: High, Success Rate: Low
You can also try using a public proxy (8080) to access to the Internet. Google about proxies, and try using a public proxy to browse the Internet; but those ports would most probably be blocked.
If you still want to give it a shot, visit to find fresh lists of proxies.

Cisco VPN + ESET NoD32 Uyumsuzluğu

Bir süredir yaşadığım bir sorun vardı; Cisco VPN’ e bağlanınca, bağlantı kurulduğu anda bilgisayarım kilitleniyordu. Aslında hardisk vs. çalışıyor görünüyor fakat touchpad ve klavye gibi donanımlar etkisiz hale geliyordu. Harici mouse takınca ise mouse kullanılabiliyor fakat bu sefer de klavye çalışmıyordu, mouse u çıkartınca ise bilgisayar dump yiyiyordu. Neyse daha fazla uzatmayayım. bunun sebebi Nod32 antivirüs programından kaynaklanıyormuş. VPN e bağlanmadan önce Nod32 yi disable moduna getirirseniz ve daha sonra bağlanırsanız herhangi bir problem olmuyor. Benzer sorunu yaşayanlar/yaşayacak olanlar olursa faydalı olacağını düşündüğüm için paylaşmak istedim.
Cisco VPN Sürümü:
(Kaynak: Onur Vatansever)
software, software.db,

Access Üzerinde 3DES

veritabanı mantığı adlı kitabınızı zaten uğraştığım access işinde yanlış yapmamak için okuyorum. Uygulama geliştirmek yerine tablo yapılarımda sorun varsa gidermek istiyorum. belki biz çoğu zaman bir iş biterken öğrendiğimiz son şey o işe nasıl başlamamız gerektiğidir.

her şey iyi güzel çok gerekli bir şey sunucu üzerindeki *.mdb dosyalarımızdaki bilgileri başkalarının okuması ya da offline iken okunması. açma parolasını nirsoft ‘un ücretsiz yazılımı bile mükemmel buluyor ücretsizce access 2003’e kadar.

çok laf kalabalığı oldu biliyorum. sizden ricam kitabınızda kullanıcı şifrelerini 3DES ile şifrelemişsiniz. Ben de bunu uygulamak istiyorum bu konuda access içine yazacağım kod, yardımcı araç ya da farklı şeyler neledrdir? hangi kaynaklara başvurmalıyım?

Öncelikle iki kavramı birbirinden ayırmakta fayda var. Sizin .mdb dosyasına koymuş olduğunuz şifre, Access içerisindeki tablolarda değil, .mdb dosyasının başlığında bir yerlerde Binary olarak saklanmaktadır. Bu, oluşturmuş olduğunuz veritabanı tablolarından ziyade Microsoft Office’in bir özelliğidir. Dosyaya koyduğunuz genel şifreyi programlama yaparak güçlendirmeniz, benim bilgim dahilinde mümkün değildir.

Benim kitapta bahsetmiş olduğum şifreleme, veritabanı tablolarında sakladığınız hassas verileri şifrelemektir. Örnek olarak User – Password değerlerinin tutulduğu bir tablo vermiş olmam, sanırım bu iki kavramın karışmasına yol açmış sizin tarafınızda. Örnekteki tablo .mdb dosyasına konan genel şifreyi saklayan tablo değildir – zaten öyle bir tablo da yok, dosyanın genel şifresi (az önce de belirttiğim gibi) tablolarda değil dosyanın içerisinde Binary olarak saklanır. Örnekteki User + Password, (örneğin) bir Web sitesinin üyelerine ait User + Password değerleri olabilir – yani Microsoft Office’in bir özelliği olmaktan ziyade, Access üzerinde geliştirmiş olduğunuz uygulamaya ait değerlerdir.

Aynı şekilde; veritabanı tablolarındaki kredi kartı numaralarının da şifrelenerek saklanması gerekir. Buna benzer diğer hassas bilgiler de şifrelenerek saklanmalıdır. Ama bunun, .mdb dosyasının genel şifresiyle bir ilgisi yoktur. .mdb dosyalarının genel olarak şifrelenmesi, sizin de işaret ettiğiniz gibi, Access 2007 itibariyle daha güçlü bir hale geldi. Access sürümünüzü yükselterek bu konudaki güvenliğinizi arttırabileceğinizi düşünüyorum – ama yine de Access 2007’yi kırabilen programların olup olmadığını bir araştırmakta fayda var.

Eğer kullanıcı bazlı erişim kontrolü (yani kim hangi tabloya erişebilir, kim okuyabilir, kim yazabilir) gibi bir ihtiyacınız varsa, Access yerine Microsoft SQL Server veya Oracle gibi daha kapsamlı bir RDBMS ürünü kullanmanızı tavsiye ederim. Bu ürünlerdeki erişim kısıtlama ve güvenlik özellikleri Access’e kıyasla çok daha güçlüdür. Access daha ziyade ufak tefek işlerde kullanmak üzere hazırlanmıştır. Microsoft SQL Server Express Edition’a bir göz atmanızı tavsiye ederim – bildiğim kadarıyla kişisel kullanım için ücretsiz; ama kurumsal amaçla kullanacaksanız lisans şartlarını bir okuyun, sonradan lisans ihlali yapmış olmanızı istemem. Yine kişisel kullanım için ücretsiz olan MySql’i de inceleyebilirsiniz; bu ürünü sadece 1-2 kez kullandığım için lisans şartlarını ve kullanıcı bazlı yetkilendirme konusundaki yeteneklerini tam bilmiyorum.

Bir access tablosu içerisindeki verilerin nasıl şifreleneceğine gelince… Uzun yıllardır SQL Server / Oracle / Lotus Notes dışında veritabanı kullanmamış olmamın yanı sıra, bugüne kadar Access’i sadece bir veri dosyası gibi kullandım, Access’in kendi geliştirme araçlarını kullanarak uygulama geliştirme ihtiyacım hiç olmadı. Yani; Access dosyasında tablolarım duruyor – işin uygulama kısmını ise .NET veya Java gibi ayrı bir platformda yapıyorum. Bu platformda geliştirdiğim uygulama, Access veritabanıyla sürekli etkileşim halinde olup gerekli yerlerde okuma / yazma işlemlerini yapıyor. Dolayısıyla, 3DES Encoding / Decoding işlemlerini de uygulamayı geliştirdiğim platform üzerinde hallediyorum. Yani veritabanı seviyesinde bu tarz bir işi hiç yapmadım. Bu durumda; tablolarınızdaki verileri şifrelemek istiyorsanız veri okuma / yazma kısmı için Java / .NET ile geliştirme yapmanızı tavsiye edeceğim. Access içerisinde böyle bir iş doğrudan yapılabilir mi diye merak ediyorsanız, bu sorunun cevabını bilmiyorum çünkü hiç denemedim. Eğer SQL Server, Oracle, MySql gibi bir ürün kullanmaya karar verirseniz; yine bu ürünlerin kendi şifreleme fonksiyonları olup olmadığını araştırabilirsiniz.

Ancak; güvenlik açısından, herhangi bir ürünü / algoritmayı olduğu gibi kullanmak pek tavsiye edilmez. Mesela bugüne kadar 3DES’i olduğu gibi kullandığımı hiç hatırlamıyorum. Genelde 3DES’i temel alıp, algoritmayı biraz değiştirerek (üzerine ek 1-2 işlev daha katarak) kullanıyorum. Böylece hem 3DES’in gücünden faydalanıyor, hem de 3DES’i kırmak üzere yazılmış standart programlara karşı nispeten güvende olduğumdan emin olabiliyorum. Bu mantıkla hobi anlamında geliştirmiş olduğum örnek bir algoritmayı adresinde inceleyebilirsiniz, sanırım ne demek istediğimi daha net göreceksiniz. Bu tarz genişletmeler için yine Java / .NET tarzı bir platformda uygulama geliştirmeniz gerekecektir diye düşünüyorum.

software, software.db,

Web Sitesindeki Veritabanı Nasıl Tespit Edilir

Asp ile yazılan bir sayfada da SQL Injection tipi bir açık olma ihtimali var değil mi?

Önemli olan kodun nasıl yazılmış oldugu sanırım?

Ayrıca, login kısmı olan bir baska sitede, arkada mutlaka database kullanılmıştır diyebilir miyiz ?

Kullanılıp kullanılmadıgını nasıl anlarız ? Kullanılmışsa, SQL veya Oracle olup olmadıgını anlama sansı var mı ?

ASP, PHP, JSP; hangi teknoloji olursa olsun, veirtabanı kullanan ve QueryString’den aldığı değeri doğrudan doğruya sorguya dahil eden her Web sayfası SQL Injection’dan etkilenebilir. Önemli olan arkasındaki mimari.

Login olan bir site %90 veritabanı kullanmıştır arkasında. %10’luk ihtimal; Hard Code girilmiş User değerleri veya XML, TXT gibi dosyalarda saklanan Login bilgileri olabilir. Ya da, bazı lokal intranetlerde Active Directory veya Domino Server tabanlı bir kontrol de olabilir; ama bu tarz kontrollere Internet ortamında bulacağın sitelerde rastlama ihtimali sıfıra yakın.

Arkada çalışan veritabanı SQL Server mı Oracle mı (ya da MySql mi, PostGreSQL mi, Access mi, vs) anlamanın genel geçer bir yolu yok sanırım. SQL Injection ile zorlayıp çıkan hata iletilerinden tahmin yürütülebilir. Ya da, Hosting firmasının veritabanının IPsini biliyorsan, o IP’ye Oracle ve SQL Server portlarından (ezbere bilmiyorum) Telnet açmayı deneyebilirsin, Telnet açabildiğin portun veritabanını kullanıyordur. Daha basit bir yol; mesela SQL Server Manager ile o IP’ye bağlanmayı denersin, bağlanıp User sorduysa SQL Server’dır. Ama veritabanı IP’si, muhtemelen sitenin IP’sinden farklı olacaktır.


Cracker’lara Karşı Önlem

Kerem Bey size bir konuda danışmak istiyorum mümkünse.İnternette Türk crackerların bir sitesi var.orada benim programların ve yüzlerce programın crackleri var.hemen programlarımı güncelledim ama bunlar yine kıracaklar eminim. pack programları kullandım ama unpack kullanıyorlar.Sizce etkili bir önlem alınabilir mi? Sınamaları tesrsine çeviriyorlar ve olly denilen bir hex editörü ile seriali buluyorlar.

Ben de programın açılışında pc ‘nin belleğini taratıyorum olly yüklüyse kapatıyorum.ama onu da aşmışlar sanırım 😦

Sizin bu konudaki fikirleriniz nedir?Bir de bu konuda merak ettiğim bir şey daha var.Bütün yazılımların crackleri var orada neden kimse birşey yapmıyor?Neden siteyi kapatmıyorlar?

İyi çalışmalar dilerim…


Assembler okuyabilen biri, bu tarz isler icin herhangi bir Disassembler / Debugger kullanabilir. Olly gibi tek bir urune odaklanip ona karsi cozum aramak mantikli degil. Programi guvenli hale getirmek icin oncelikle kiracak kisilerin kullanacaklari yontemleri bilmen gerekiyor. Bunu da tek bir mail icerisinde anlatmam mumkun degil.

Programin derlendiginde bir .EXE dosyasi uretecektir. Bu dosya, Disassembler yardimiyla Assembler diline kolayca cevrilebilir. Ardindan; kodu okuyan biri, Serial algoritmasini cozebilir. Cozulemeyecek algoritma yoktur, Cubase gibi Dongle tabanli programlari dahi kirabilen kisiler var. Olsa olsa algoritmayi zorlastirip kiran kisinin seviyesinin uzerine cikartabilirsin.

Mesela seri numarasini program icerisinde bir degiskende tutuyorsan, en basit araclarla bile kabak gibi gozukur 😉 Ama onun yerine girilen kod icerisindeki bazi sartlar ararsan(yani tek bir dogru kod olmazsa), isler biraz daha zorlasacaktir. O zaman Debug ederek algoritmani cozmek zorunda kalacaktir, acemi biri altindan kalkamaz.

Bir diger yontem de sudur: Kodun bir yerinde mutlaka “Eger a = b ise, Serial dogrudur, yoksa yanlistir” gibi bir ifade vardir. Koda yapilan ufak mudahelelerle “Eger a b ise Serial dogrudur” haline getirilebilir. Bu durumda algoritman istedigin kadar karisik olsun, ufacik bir noktaha mudahele ederek programini kirabilirler. O yuzden, birden fazla noktada guvenlik kontrolu yapmakta fayda var. Mesela program calisirken Random bazi yerlerde de girilmis Serial’i farkli sekillerde kontrol etmekte fayda var. Mesela (atiyorum) bir yerde 1. ve 6. karakterin ayni olmasi gerektigini kontrol ederken, bir baska yerde 2. karakterdeki sayinin 7. karakterdeki sayidan daha kucuk olup olmadigini kontrol edebilirsin. Bu kontrolleri cogalttiginda, programinin kirilmasi zorlasacaktir.

Burada saydiklarim, en basit noktalar tabii, bir fikir versin diye yazdim. Internet uzerindeki Crack Tutorial’lari okumani ve biraz Assembly ogrenip bulabildigin butun Crack alistirmalarini yapmani tavsiye ederim. Belli bir seviyeye gelip Cracker’lar gibi dusunmeye basladiginda programlarini daha guvenli hale getirebilirsin.

Son bir nokta daha var: Piyasada cesitli diller icin gelistirilmis Obfuscator yazilimlari var. Bu yazilimlar, EXE haline getirilmis olan kodu karmakarisik hale getirerek Assembler formatinda okunmasini ve kirilmasini cok daha zor hale getiriyor. Kullandigin dil / platform icin bir Obfuscator bulup onu kullanmayi da deneyebilirsin – ama cogu ucretlidir.

Umarim yardimci olabilmisimdir. Iyi calismalar…